繁体   English   中英

分配或保留在cocos2d和目标C中

[英]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];

只是为了明确这一点: mutableCopyalloc相同,这意味着您声称对相关对象拥有所有权。 您必须将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM