我发现Objective-C/cocoa框架的一个例子有以下代码.
int main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// Create an array
NSArray *month = [NSArray arrayWithObjects:@ ... nill];
[pool drain];
}
Run Code Online (Sandbox Code Playgroud)
Q1:这背后的魔力是什么(为什么我需要NSAutoreleasePool代码?)?NSAutoreleasePool和pool drain块之间发生了什么魔力?我觉得我不需要释放*month自己.这是因为它在NSAutoreleasePool和pool drain块内吗?
Q2:使用Xcode,我已经获得了main()函数.在这种情况下,我该如何使用NSAutoreleasePool和pool drain?
例如 :
int main(int argc, char *argv[])
{
//NSAutoreleasePool *pool = [[[NSAutoreleasePool] alloc] init];
return NSApplicationMain(argc, (const char **) argv);
}
Run Code Online (Sandbox Code Playgroud)
Q1:神奇的是 NSObject -autorelease 实例方法调用 NSAutoreleasePool +addObject: 类方法。NSObject 实例被池化在当前的 NSAutoreleasePool 实例中。NSAutoreleasePool -drain 实例方法调用池化实例的release方法。
Apple 的 Cocoa 实现与 GNUstep 之间并不完全相同,但也很相似。
我不知道为什么月份不被释放,它应该通过排水管释放。
Q2:你可以在任何你想使用的地方使用 NSAutoreleasePool 。实例化 NSAutoreleasePool 意味着当前池将被新实例更改。Drain 会将当前池返回到前一个实例。
除此之外 NSApplicationMain 永远不会返回。它调用 exit 函数来退出应用程序并终止进程。
| 归档时间: |
|
| 查看次数: |
10285 次 |
| 最近记录: |