繁体   English   中英

iPhone内存管理的模棱两可方案

[英]Ambiguous scenario for iPhone memory management

我很难理解这种情况。

  • 我创建一个对象
  • 我将其保留的属性设置为某种
  • 我忘了释放它的财产
  • 我释放对象

由于我没有在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方法的实现内。

是的,这是泄漏。

保留,分配将使计数器增加一。 释放将减少计数器。 当计数器达到零时,它将释放内存。

认为二传手是这样的:

[newvalue retain];
[property release]; 
property = newvalue;

所以..

  • 创建一个对象=> 0 + 1 = 1
  • 将其分配给某个对象作为保留属性=> 1 + 1 = 2
  • 释放对象=> 2-1 = 1

您将不得不再次释放该对象。 而且,请相信我, autorelease在iPhone环境中无法很好地工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM