我对理解这种情况有些困难。iPhone内存管理的模糊场景
- 我创建了一个对象
- 我所保留的属性设置为东西
- 我忘记释放其财产
- 我释放对象
,因为我没有松开财产在dealloc方法中,场景会导致内存泄漏还是会自动释放该属性?
我对理解这种情况有些困难。iPhone内存管理的模糊场景
,因为我没有松开财产在dealloc方法中,场景会导致内存泄漏还是会自动释放该属性?
是的,它是泄漏。
保留,alloc将增加一个计数器。 释放将减少计数器。 当计数器达到零时,它将释放内存。
思考设定器中,这样:
[newvalue retain];
[property release];
property = newvalue;
所以..
您将不得不再次释放该对象。 而且,相信我autorelease
在iphone环境下工作不太好。
可可的工作方式是内存管理总是在本地看起来平衡,在任何一个方法*。这是一个重点。通过查看这种方法,您应该能够判断出方法中是否存在泄漏或错误。没有全球程序知识要求。
如果您从-copy,-alloc,-retain或-new方法接收到对象,则您有责任释放对象。
如果你这样做:
[obj setProp:foo];
是你的责任,以释放富?否 - 查看规则。如果obj保留它(并且你说你碰巧知道它的确如此),那么obj有责任在它的dealloc方法中释放它,如果不是更早的话。
所以,如果你这样做,它是平衡的,不管是什么样的财产-prop
是。
id obj = [[MyObject alloc] init];
[obj setProp:foo];
[obj release];
*除了在init,copy,dealloc和accessor方法的实现中。
这是不正确的,autorelease的确在iPhone上工作。 – Ken 2010-04-07 09:08:10
少量的自动释放对象可以。但是,我仍然建议你应该避免使用它。 你可以在dealloc func 中释放属性,因为'[nil release]'不会给你带来任何麻烦。 – Bird 2010-04-07 09:38:13