【问题标题】:some problem with variables in objective-cObjective-C中的变量有一些问题
【发布时间】:2011-06-07 02:51:50
【问题描述】:

这是我正在做的事情:

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

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

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

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

【问题讨论】:

  • imageTag.mediaTagsimageTag.allTags 可能是nil
  • 好吧,在“addObject”完成后,我打印“objectAtIndex”并获取值。 imageTag 是一个已初始化的 NSMutableArray。只有在执行最后 5 行之后,我才得到 thingy :(

标签: objective-c ios variables memory


【解决方案1】:

如果我理解正确,您需要复制 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;
}

【讨论】:

  • @SB:我该怎么做?有什么帮助吗?
  • 我已经更新了答案。 createCopy 方法将进入您的 MyObj.m 文件。我假设 unitTag 的类型是 MyObj
  • 请注意,有一个协议:NSCopying
  • @SB : 谢谢...但是当我们以这种方式复制 NSMutableArrays 时会发生什么情况...(而不仅仅是普通对象)...我们需要再次创建副本吗?
猜你喜欢
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
相关资源
最近更新 更多