我很难理解这种情况。
- 我创建一个对象
- 我将其保留属性设置为
- 我忘记释放它的财产
- 我释放对象
由于我没有在dealloc方法中释放该属性,那么该场景会导致内存泄漏还是会自动释放该属性?
我很难理解这种情况。
由于我没有在dealloc方法中释放该属性,那么该场景会导致内存泄漏还是会自动释放该属性?
Cocoa 的工作方式是内存管理在任何一种方法中总是看起来是局部平衡的*。这是重点。您应该能够仅通过查看一种方法来判断该方法是否存在泄漏或错误。无需全球计划知识。
如果您从 -copy、-alloc、-retain 或 -new 方法收到对象,则您有责任释放该对象。
如果你这样做:
[obj setProp:foo];
释放 foo 是你的责任吗?否 - 请参阅规则。如果 obj 保留它(并且您说您碰巧知道它确实存在),那么 obj 有责任在其 dealloc 方法中释放它,如果不是更早的话。
所以如果你这样做,它是平衡的,不管是什么属性-prop
。
id obj = [[MyObject alloc] init];
[obj setProp:foo];
[obj release];
*除了在 init、copy、dealloc 和 accessor 方法的实现中。
是的,是泄漏。
保留,分配将计数器加一。释放将减少计数器。当计数器达到零时,它将释放内存。
把 setter 想象成这样:
[newvalue retain];
[property release];
property = newvalue;
所以..
您将不得不在某个时候再次释放该对象。而且,相信我autorelease
在 iphone 环境中运行得不太好。