Kon*_*d77 4 cocoa-touch memory-management objective-c autorelease nsautoreleasepool
我想知道以下代码是否是使用new的好方法@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]];
}
}
Run Code Online (Sandbox Code Playgroud)
来自Apple的参考:
但是,有三种情况可能会使用您自己的自动释放池:
如果您正在编写不基于UI框架的程序,例如命令行工具.
如果编写一个创建许多临时对象的循环.您可以在循环内创建一个自动释放池,以便在下一次迭代之前处理这些对象.在循环中使用自动释放池有助于减少应用程序的最大内存占用量.
如果你产生一个辅助线程.一旦线程开始执行,您必须创建自己的自动释放池; 否则,您的应用程序将泄漏对象.(有关详细信息,请参阅"自动释放池和线程".)
我个人创建了几个@autoreleasepool块,以避免在使用Core Data的后台同步期间出现HEAVY内存泄漏,因为框架(我喜欢)创建了大量自动释放的对象,必须将其耗尽以保留可用内存;)