gpt4 book ai didi

objective-c - Objective-C/cocoa框架中NSAutoreleasePool有什么神奇之处?

转载 作者:太空狗 更新时间:2023-10-30 03:43:15 26 4
gpt4 key购买 nike

我发现一个Objective-C/cocoa框架的例子有如下代码。

int main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

// Create an array
NSArray *month = [NSArray arrayWithObjects:@ ... nill];

[pool drain];
}
  • 问题 1:这背后的魔力是什么(为什么我需要 NSAutoreleasePool 代码?)? NSAutoreleasePoolpool drain block 之间发生了什么魔法?我知道我不需要自己释放*month。这是因为它位于 NSAutoreleasePoolpool drain block 内吗?

  • Q2:使用 Xcode,我已经获得了 main() 函数。在这种情况下,如何使用 NSAutoreleasePoolpool drain

例如:

int main(int argc, char *argv[])
{
//NSAutoreleasePool *pool = [[[NSAutoreleasePool] alloc] init];
return NSApplicationMain(argc, (const char **) argv);
}

最佳答案

Q1:神奇的是 NSObject -autorelease 实例方法调用了 NSAutoreleasePool +addObject: 类方法。 NSObject 实例池化在当前的 NSAutoreleasePool 实例中。 NSAutoreleasePool -drain 实例方法调用池化实例的 release 方法。

Apple 和 GNUstep 的 Cocoa 实现不完全相同,但相似。

不知道为什么month没有发布,应该是drain发布的。

Q2: NSAutoreleasePool 想用哪里就用哪里。实例化 NSAutoreleasePool 意味着当前池将被新实例更改。 drain 会将当前池返回到之前的实例。

此外,NSApplicationMain 永远不会返回。它调用退出函数退出应用程序并终止进程。

关于objective-c - Objective-C/cocoa框架中NSAutoreleasePool有什么神奇之处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5138142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com