[英]Assign or retain in cocos2d and objective C
这是我目前的情况:我有一个名为dictKeyArray的NSMutableArray我用@property(nonatomic,retain)NSMutableArray *dictKeyArray
分配了一个属性@property(nonatomic,retain)NSMutableArray *dictKeyArray
我在实现文件中合成了我的可变数组。
后来,我有一个字典名称storeDict。 我将字典的所有键分配给dictKeyArray,如下所示:
dictKeyArray = [[storeDict allKeys] mutableCopy];
现在我稍后在我的实现文件中使用这个字典。 但是,当它发布它时,我在dealloc
方法中释放它一次。 使用仪器检查时,会出现泄漏! 为什么dictKeyArray漏水了? 我应该使用assign
而不是retain
吗? 我还不清楚究竟有什么不同......谢谢!
你必须发送一个
[[[storeDict allKeys] mutableCopy] autorelease];
只是为了明确这一点: mutableCopy
与alloc
相同,这意味着您声称对相关对象拥有所有权。 您必须将retainCount减少一个。
顺便说一下:你应该使用你为它编写的访问器。 您现在只是将它分配给您的iVar。 如果你想让你的访问者工作,你将不得不使用类似的东西
object.dictKeyArray = ...;
一般来说。 或者在这里(如dreamlax所述)
self.dictKeyArray = ...;
因为您指的是代码所在的特定类的对象。
只有这样,您才能确保访问者正确保留您的对象。 否则编写访问器代码根本没有意义,因为它永远不会被调用。
请注意:正如Josh在评论中所说,您的代码应该是有效的(至少从我的角度来看)。 我建议的解决方案并不像您那样容易出错,因为您遵守规则(可以在不久的将来免除您的头痛)。
你应该使用self.dictKeyArray = ...
没有self.
您正在直接访问实例变量,绕过属性的任何内存管理优势,但是,请记住您拥有mutableCopy
的结果,并且分配给也拥有所有权的属性将导致双重所有权,因此使用:
self.dictKeyArray = [[[storeDict allKeys] mutableCopy] autorelease];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.