autorelease自动释放内存,并不会立即把内存释放掉,而是要等到下一个事件周期才会释放掉。问题是一些资源我们不得不使用autorelease类型,比如作为函数的返回值,而且系统api及项目是的大部分也都是这么做的,如果全都依靠我们手动释放很容易造成内存泄漏。
| 01 | for(inti = 0; i <= 10000; i ++) { |
| 02 |
| 03 | //创建一个自动释放池 |
| 04 |
| 05 | NSAutoreleasePool *pool = [NSAutoreleasePoolnew]; |
| 06 |
| 07 | NSString *filePath = [[NSBundle mainBundle] pathForResource:@"hf"ofType:@"PNG"]; |
| 08 |
| 09 | UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath]; |
| 10 |
| 11 | UIImage *scalimage = [image imageByScalingAndCroppingForSize:CGSizeMake(320, 640)]; |
| 12 |
| 13 | [image release]; |
| 14 |
| 15 | //将自动释放池内存释放,它会同时释放掉上面代码中产生的临时变量image2 |
| 16 |
| 17 | [pool drain]; |
| 18 |
| 19 | } |
本文探讨了 autorelease 在 Objective-C 中的应用及其对内存管理的影响。通过示例代码展示了 autorelease 的工作原理,即它如何延迟对象的释放直到下一个事件周期。文章还讨论了 autorelease 在函数返回值中的常见用途以及在实际项目中的必要性。
196

被折叠的 条评论
为什么被折叠?



