strong vs copy区别

92 阅读1分钟

在 Objective-C 中,使用 strong 和 copy 的主要区别在于属性赋值时对传入对象的处理方式不同:

  • strong
    当你声明属性为 strong 时,赋值操作仅仅是将传入对象的引用计数增加(即“持有”这个对象)。如果你把一个可变字符串(NSMutableString)的实例赋值给一个 strong 的 NSString 属性,那么该属性实际上指向的是同一个对象,之后如果外部修改了这个 NSMutableString,对该属性也会产生影响。

  • copy
    而使用 copy 时,在赋值过程中会调用对象的 copy 方法,生成该对象的一个副本,并把副本赋值给属性。这样即使你传入的是一个可变字符串(NSMutableString),复制后得到的对象通常是不可变的 NSString。这样做可以防止外部对原始可变对象的修改影响到属性,从而保证属性值的安全性和不变性。

因此,当你声明 NSString 类型的属性时,推荐使用 copy 来防止意外地接收到可变对象,从而导致后续不可预知的修改。这样一来,即使外部传入了 NSMutableString,属性内部保存的将是不可变的副本,确保了对象的稳定性。