如果我用@autoreleasepool包装整个应用程序,我可以忽略指针吗?

时间:2013-11-26 11:15:07

标签: ios objective-c

如果我将我的UIApplicationMain包装在@autoreleasepool中,那是否意味着我永远不必考虑目标C中的内存管理?

例如:

@autoreleasepool {
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([DDAppDelegate class]));
}

3 个答案:

答案 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完成之前将它们全部保存起来会很昂贵。