【问题标题】:Add object to NSMutable Array, deep copy将对象添加到 NSMutableArray,深拷贝
【发布时间】:2014-06-06 15:05:51
【问题描述】:

我在我的类中声明了一个属性:NSMutableArray *data;

classmethod{
  [self.data addObject: message];
}

它是将消息的引用添加到数组中,当方法结束时,数据的内容将设置为 nil,有没有办法我可以进行深度复制,然后在方法结束时将消息添加到数组而不丢失它。

【问题讨论】:

  • 这可能是相关的:stackoverflow.com/a/647532/335858
  • classmethod 真的是什么?它是一个类方法吗? (它是否以+ 开头?)如果是这样,请意识到self 是指向类本身的指针,而不是类的实例。如果您发布您的实际代码会有所帮助——您所拥有的不是有效的Objective-C。

标签: objective-c nsmutablearray deep-copy


【解决方案1】:

就像 Caleb 所说的那样,如果这确实是一个类方法,就像你的代码暗示的那样,那么它就不会起作用。如果它是一个实例方法,例如示例 1,那么它应该可以正常工作,并且需要更多代码来帮助回答这个问题。

示例 1:没关系

-(void)classMethod
{
    [self.data addObject: message];
}

示例 2:这是不行的,因为你不能从类方法中引用属性,除非你传递它们

+(void)classMethodWithMessage:(NSString *)message
{
    [self.data addObject: message];
}

示例 3:这没关系,因为您传递了需要更新的数组

+(void)classMethodWithArray:(NSMutableArray *)array message:(NSString *)message
{
    [array addObject: message];
}

【讨论】:

    【解决方案2】:

    你可以添加一个对象的副本:

    [self.data addObject: [message copy]];
    

    虽然我不确定你为什么会丢失你的对象,但假设 self.data 是一个强引用,它应该让消息保持活动状态。

    【讨论】:

    • 我没有投反对票,但任何投反对票的人都需要对“为什么”发表评论。最烦人的事情之一就是在不解释原因的情况下投反对票。
    • 谁说过关于单身人士的事,如果班级是单身人士又有什么关系?
    • 单例设计模式是我唯一使用过的我希望类方法修改属性的模式,尽管我已经删除了答案的那部分。
    【解决方案3】:

    消息的属性应该设置为“强”!

    【讨论】:

    • 不是消息属性,而是数据属性。
    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多