我在AppDelegate中有一个NSMutableArray
我正在使用属性(非原子,保留)
并合成它

再次在didfinishlaunch中使用[[nsmutablearray alloc] init]进行分配;

因此,我的疑问是是否要使用release方法在Deallloc中发布它。
它发布正确吗?
或仍然保留计数。
如果我做错了,请提供适当的解决方案。

最佳答案

这取决于您如何分配它。如果您直接将任务分配给ivar,例如

myProperty = [[NSMutableArray alloc] init];


然后,在dealloc中使用单个发行版就足够了,因为您期望从alloc中获得的保留计数为1。

另一方面,如果您通过以下任一方式使用了合成的二传手:

[self setMyProperty:[[NSMutableArray alloc] init]];


要么

self.myProperty = [[NSMutableArray alloc] init];


那么您几乎可以肯定泄漏了该物体。您将保留计数增加了两次(一次通过alloc,在设置器中一次),而仅减少了一次(在dealloc中)。

最好的IMO是使用setter和自动释放池:

self.myProperty = [[[NSMutableArray alloc] init] autorelease];


在这里,alloc与本地自动释放保持平衡,而setter的保留与dealloc释放保持平衡。

尽管该方法涉及两个额外的方法(setter方法和autorelease调用),但它可以确保根据需要(在setter方法中)release d保留先前在属性中设置的所有保留值。

关于iphone - 关于使用非原子和保留属性(property),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9288674/

10-12 17:11
查看更多