可可 – NSautorelease什么时候会发布这个?

好的说我有以下功能:

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

myNum何时会被释放?每当我调用calculate时,myNum都会被创建并添加到堆栈中吗?

还说我有一个属性,如:

@property (nonatomic, retain) NSMutableArray *inputsArr; 

我把它合成为:

@synthesize inputsArr = _inputsArr;

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

最佳答案 自动释放池是线程本地堆栈 – 您可以推送它们.当销毁池时,延迟释放消息将被发送到对象.

考虑一下:

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!

所以’when’真的取决于自动释放池的构建方式 – 但总是可以确保你的对象比本地池更长,所以这绝不是一个限制:

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!”,但你永远不应该依赖“好吧,它应该被摧毁,但它似乎工作正常”.

点赞