当前位置:  开发笔记 > IOS > 正文

在Objective C中填充对象

如何解决《在ObjectiveC中填充对象》经验,为你挑选了1个好方法。

我试图在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中找出内存管理.



1> Marc W..:

这取决于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内存管理指南,我强烈建议您这样做.这是非常有益的.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有