如果我将我的UIApplicationMain包装在@autoreleasepool
中,那是否意味着我永远不必考虑目标C中的内存管理?
例如:
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([DDAppDelegate class]));
}
答案 0 :(得分:1)
大多数UIApplicationMains已经包含在@autorelease池中。如果您使用自动引用计数,则仍需要考虑内存管理。
答案 1 :(得分:0)
您main
始终包含在自动释放池中:
int main(int argc, char *argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
因为这需要注册要自动释放的对象。如果您使用ARC
,那么这也适用于任何自动释放对象。
永远不会是你不必考虑内存管理。由于ARC只会跟随您的代码,因此您创建一个static strong
变量,因为您告诉编译器保留它,所以它不会被释放。只要考虑变量的减速度并使用ARC
,就可以减少内存管理问题。
如果您正在使用任何CoreFoundation类,则必须自行完成所有内存管理,因为ARC
不会对CoreFoundation类进行内存管理。
答案 2 :(得分:0)
首先,您需要了解obj-c中的内存管理基础。例如
http://www.raywenderlich.com/2657/
http://rypress.com/tutorials/objective-c/memory-management.html
@autoreleasepool只是在创建大量自动释放对象的情况下帮助管理内存,并且在应用程序的runloop完成之前将它们全部保存起来会很昂贵。