这是我目前的情况:我有一个名为 dictKeyArray 的 NSMutableArray,我为其分配了一个属性,并@property(nonatomic,retain)NSMutableArray *dictKeyArray
在实现文件中合成了我的可变数组。
后来,我有了一个字典名storeDict。我将字典的所有键分配给 dictKeyArray,如下所示:
dictKeyArray = [[storeDict allKeys] mutableCopy];
现在我稍后在我的实现文件中使用这个字典。但是,在释放它时,我在我的dealloc
方法中释放它一次。用仪器检查时,出现泄漏!为什么 dictKeyArray 泄漏?我应该使用assign
而不是retain
吗?我仍然不清楚到底有什么区别......谢谢!
问问题
172 次
2 回答
1
你必须发送一个
[[[storeDict allKeys] mutableCopy] autorelease];
只是为了说明这一点:与您声称拥有相关对象的所有权mutableCopy
相同。alloc
您必须将 retainCount 减一。
顺便说一句:您应该使用为它编写的访问器。您现在只是将其分配给您的 iVar。如果你想让你的访问器工作,你将不得不使用类似的东西
object.dictKeyArray = ...;
一般来说。或者在这里(如dreamlax所述)
self.dictKeyArray = ...;
因为您指的是代码所在的特定类的对象。
只有这样,您才能确保您的对象被访问者正确保留。否则编写访问器代码根本没有意义,因为它永远不会被调用。
请注意:正如 Josh 在评论中所说,您的代码应该是有效的(至少从我的角度来看)。我建议的解决方案不像您的那样容易出错,因为您遵守规则(可以在不久的将来使您免于头痛)。
于 2012-06-13T18:49:54.897 回答
1
你应该使用self.dictKeyArray = ...
. 如果没有 ,self.
您将直接访问实例变量,绕过属性的任何内存管理优势,但请记住,您拥有 的结果mutableCopy
,并且分配给也具有所有权的属性将导致双重所有权,因此请使用:
self.dictKeyArray = [[[storeDict allKeys] mutableCopy] autorelease];
于 2012-06-13T18:50:36.253 回答