gpt4 book ai didi

cocoa - NSautorelease 什么时候发布这个?

转载 作者:行者123 更新时间:2023-12-03 16:15:06 25 4
gpt4 key购买 nike

好吧,假设我有一个如下所示的函数:

-(NSNumber *)calculate{
NSNumber *myNum = [[[NSNumber alloc]initWithInt:5] autorelease];
return myNum;
}

myNum 何时发布?每当我调用计算时,myNum 都会被创建并添加到堆栈中吗?

还说我有一个属性,例如:

@property (nonatomic, retain) NSMutableArray *inputsArr; 

我将其合成为:

@synthesize inputsArr = _inputsArr;

我在 mu 函数之一的代码中分配并启动它..我该如何释放这段内存? CoaCoa 内存管理的任何指南...我只能找到真正令人困惑或明显的指南..提前致谢

最佳答案

自动释放池是线程本地堆栈——您可以压入和弹出它们。当池被销毁时,延迟的release消息将被发送到对象。

考虑一下:

NSAutoreleasePool * pool = [NSAutoreleasePool new];
NSNumber * n = [NSNumber numberWithDouble:1.0/17.0]; << n is autoreleased
[n self]; << OK!
[pool release]; << n is messaged release
[n self]; << BAM!

因此,“何时”实际上取决于自动释放池的构建方式 - 但始终可以确保您的对象比本地池的生命周期长,因此这永远不是限制:

NSAutoreleasePool * pool = [NSAutoreleasePool new];
NSNumber * n = [NSNumber numberWithDouble:1.0/17.0]; << n is autoreleased
[n self]; << OK!
[n retain];
[pool release]; << n is messaged release
[n self]; << OK!
[n release];
[n self]; << BAM!

以上是你应该依赖的。在某些现实世界的情况下,一个对象可能仍然存在,您会期望“BAM!”,但您永远不应该依赖“好吧,它应该已经被销毁,但它似乎工作正常” .

关于cocoa - NSautorelease 什么时候发布这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9204803/

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