我在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/