gpt4 book ai didi

objective-c - 在 Objective-C 中填充对象

转载 作者:行者123 更新时间:2023-12-03 16:53:31 24 4
gpt4 key购买 nike

我正在尝试在 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 版本自动为您合成,并在保留和分配新值之前将属性的旧值设置为 nil。

但是,虽然你的内存管理没有问题,但是你的代码还是有问题。请记住,myObject 是一个指针,就像在 C 或 C++ 中一样。这意味着,如果您将其添加到 myDic,然后稍后修改该对象的属性(例如在 for 循环的下一次迭代中),那么当您将对象拉出时,这些更改将会反射(reflect)出来。将来某个时候的字典。你想要的是这样的:

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 的 Memory Management Guide for Cocoa ,我强烈建议这样做。内容非常丰富。

关于objective-c - 在 Objective-C 中填充对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/924247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com