我想知道以下代码是否是使用新@autoreleasepool
的好方法,我应该这样使用它还是让主自动释放池处理这些对象?
谢谢!
- (UIBarButtonItem*)backButton {
UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"CustomBackTitle"
style:UIBarButtonItemStyleBordered
target:nil
action:nil];
return [backButton autorelease];
}
- (void) callingAutoReleasedObject {
@autoreleasepool {
[[self navigationItem] setBackBarButtonItem:[self backButton]];
}
}
答案 0 :(得分:8)
来自Apple的reference:
但是,有三次你可以使用自己的 自动释放池:
如果您正在编写一个不基于UI框架的程序,请执行此操作 作为命令行工具。
如果你写一个创建很多的循环 临时对象。您可以在循环内创建自动释放池 在下一次迭代之前处理这些对象。用一个 循环中的自动释放池有助于减少最大内存 应用程序的足迹。
如果你产生了一个辅助线程。您必须创建自己的自动释放 一旦线程开始执行,就会浮动池;否则,你的 应用程序将泄漏对象。 (请参阅“自动释放池和线程” 详情。)
我个人创建了几个@autoreleasepool块,以避免在使用Core Data的后台同步期间发生重大内存泄漏,因为框架(我喜欢)创建了大量自动释放的对象,必须将其耗尽以保留可用内存; )
答案 1 :(得分:2)
创建自动释放池的另一个原因是,如果您处于创建大量自动释放对象的循环中。
答案 2 :(得分:1)
通常在以下情况下创建自动释放池:
对于像你的例子一样简单的事情,不要打扰。
答案 3 :(得分:0)
您需要定义自己的自动释放池的唯一原因是您还要创建自己的线程。
对于您上面所做的事情,绝对只需使用主要的自动释放池。