0

这是我目前的情况:我有一个名为 dictKeyArray 的 NSMutableArray,我为其分配了一个属性,并@property(nonatomic,retain)NSMutableArray *dictKeyArray
在实现文件中合成了我的可变数组。
后来,我有了一个字典名storeDict。我将字典的所有键分配给 dictKeyArray,如下所示:
dictKeyArray = [[storeDict allKeys] mutableCopy];
现在我稍后在我的实现文件中使用这个字典。但是,在释放它时,我在我的dealloc方法中释放它一次。用仪器检查时,出现泄漏!为什么 dictKeyArray 泄漏?我应该使用assign而不是retain吗?我仍然不清楚到底有什么区别......谢谢!

4

2 回答 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 回答