[英]Correct way of using @autoreleasepools?
我想知道以下代码是否是使用新的@autoreleasepool
的好方法,我应该这样使用它还是让主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]];
}
}
来自Apple的参考 :
但是,有三种情况可能会使用您自己的自动释放池:
如果您正在编写不基于UI框架的程序,例如命令行工具。
如果编写一个创建许多临时对象的循环。 您可以在循环内创建一个自动释放池,以便在下一次迭代之前处理这些对象。 在循环中使用自动释放池有助于减少应用程序的最大内存占用量。
如果你产生一个辅助线程。 一旦线程开始执行,您必须创建自己的自动释放池; 否则,您的应用程序将泄漏对象。 (有关详细信息,请参阅“自动释放池和线程”。)
我个人创建了几个@autoreleasepool块,以避免在使用Core Data的后台同步期间出现HEAVY内存泄漏,因为框架(我喜欢)创建了大量自动释放的对象,必须将其耗尽以保留可用内存;)
创建自动释放池的另一个原因是,如果您处于创建大量自动释放对象的循环中。
您通常会在以下情况下创建自动释放池:
对于像你的例子一样简单的事情,不要打扰。
您需要定义自己的自动释放池的唯一原因是您还要创建自己的线程。
对于您正在进行的操作,请务必使用主要的自动释放池。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.