objective-c - Objective-c 中变量的一些问题

标签 objective-c ios variables memory

这就是我正在做的事情:

    [imageTag.mediaTags addObject:unitTag];
    [imageTag.allTags addObject:unitTag];

    unitTag.title=@"";
    unitTag.link=@"";
    unitTag.description=@"";
    unitTag.price=@"";
    unitTag.imageLink=@"";

问题是,一旦我执行了第 2 行之外的操作,存储在数组中的值也会丢失(我使用 GDB 来打印并解决了这个问题)。现在的问题是,我正在重用 unitTag 对象来输入一些信息并将该信息保存在数组中。那么我的选择是什么?我需要删除这些值,因为有些值是可选的,我不想弄乱。

有人可以告诉我吗?谢谢。

最佳答案

如果我理解正确,您需要复制 UnitTag 对象并将其插入到数组中。您只需在数组中存储一个对象引用,然后删除该引用正在使用的值。

addObject 不存储副本 - 它存储实际的对象引用。

要制作副本,您需要创建一个新对象(unitTag),然后添加它。因此您的代码可能是:

id unitTagCopy = [unitTag createCopy];
[imageTag.mediaTags addObject:unitTagCopy];
[imageTag.allTags addObject:unitTagCopy];

您必须添加 createCopy 方法。我想可能是:

-(id) createCopy {
    MyObj* obj = [[[MyObj] init] alloc] autorelease];
    obj.title= self.title;
    obj.link= self.link;
    obj.description= self.description;
    obj.price= self.price;
    obj.imageLink= self.imageLink;
    return obj;
}

关于objective-c - Objective-c 中变量的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6260182/

相关文章:

javascript - 如何根据条件为 JSX 中的键赋予变量的值

objective-c - 如何确定 Objective-C 属性的类别?

ios - 实现 TableView 导航 xcode 6

ios - 我如何转储 `VM: Mapped File` ?

ios - TableViewCell scroll 滚动时选择了错误的单元格

java - eclipse "can not be resolved to variable"

bash - 如何将日期范围作为变量传递给 awk

objective-c - Cocoa应用程序首次打开

objective-c - 如何用来自两个不同对象类型的两个数组的数据填充 UITableView?

ios - 为什么大多数 iOS 应用程序在没有警告窗口的情况下崩溃