Tha*_*nks 2 iphone cocoa-touch autorelease uikit
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
NSLog(@"new event...");
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
如果是这种情况,则必须在每个事件上调用main()函数,对吧?但我试了一下,"新事件......"日志消息就出现在应用程序启动时.所以我猜在主线程中必须有另一个自动释放池.
不是.所有Cocoa或CocoaTouch类都需要存在自动释放池才能不泄漏内存.因此,需要现有的自动释放池来调用UIApplicationMain()以覆盖在UIApplicationMain()的上下文中实例化的任何(可能)自动释放的对象.正如您在UIApplicationMain返回后看到的那样,外部自动释放池就在应用程序退出之前.内部(记住自动释放池可以嵌套并且自动释放的对象被添加到最新/最深的池中)自动释放池在应用程序的运行循环的每次迭代开始时创建,并在迭代结束时释放.因此,运行循环获取的每次迭代都是"自己的"自动释放池.如果处理事件可能会产生大量自动释放的内存(在iPhone上是一个坏主意,但在OS X上很常见),您可能希望在事件处理代码中创建自己的内部自动释放池,这些代码可以在处理过程中释放事件.
归档时间: |
|
查看次数: |
1742 次 |
最近记录: |