我试图在for循环中动态填充字典,如下所示:
伪代码
myObject = new Object myDict = new Dictionary for(int i; i < 10;i++) myObject.value1 = new data from somewhere myObject.value2 = new data from somewhere myDic = value:myObject key:i end for
所以我的问题是在objective-c中,我可以继续分配新数据myObject
而不是每次都在循环中释放它吗?我仍然试图在objective-c中找出内存管理.
这取决于myObject
实际情况以及如何定义其属性.假设你已将它们定义为发布如下:
@property (nonatomic, retain) SomeClass *myProperty;
然后是的,你可以做到这一点.setter通过objective-c release自动合成,并在保留和赋值之前设置为nil旧属性值.
但是,尽管您的内存管理没有问题,但代码仍然存在问题.请记住,这myObject
是一个指针,就像在C或C++中一样.这意味着如果您将其添加到myDic
稍后修改对象的属性(例如在for循环的下一次迭代中),那么当您在将来的某个时刻将对象从字典中拉出时,这些更改将会反映出来. .你想要的是这样的:
myObject = nil myDict = new Dictionary for(int i; i < 10;i++) myObject = new Object myObject.value1 = new data from somewhere myObject.value2 = new data from somewhere myDic setValue:myObject forKey:i myObject release end for
这样做是myObject
在将它放入字典后释放(所有cocoa集合类都保留你放入它们的任何对象,当它们被移除或者集合本身被释放时释放它们)所以你也没有泄漏Object
在每次迭代时分配一个新实例,这样你就不会一遍又一遍地修改同一个对象.
如果您还没有阅读Apple的Cocoa内存管理指南,我强烈建议您这样做.这是非常有益的.