好的说我有以下功能:
-(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!”,但你永远不应该依赖“好吧,它应该被摧毁,但它似乎工作正常”.