【发布时间】:2023-04-05 14:24:01
【问题描述】:
什么时候应该使用复制而不是保留?没看懂。
【问题讨论】:
-
在这个问题的辩护中,其他的都是特定于属性类型的,但是是的,这个问题被问了很多。
标签: objective-c copy retain
什么时候应该使用复制而不是保留?没看懂。
【问题讨论】:
标签: objective-c copy retain
当你想保证对象的状态时,你会使用copy。
NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString retain];
[mutString appendString:@"Test"];
此时 b 刚刚被那里的第 3 行弄乱了。
NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString copy];
[mutString appendString:@"Test"];
在这种情况下,b 是原始字符串,不会被第 3 行修改。
这适用于所有可变类型。
【讨论】:
retain :在创建的对象上完成,只是增加了引用计数。
copy -- 它创建一个新对象,当创建新对象时,retain count 将为 1。 希望这对您有所帮助。
【讨论】:
当您不希望收到的值在您不知情的情况下被更改时,复制很有用。例如,如果您有一个属性是 NSString 并且您依赖该字符串在设置后不会更改,那么您需要使用复制。否则,有人可以将NSMutableString 传递给您并更改值,这反过来又会更改您的NSString 的基础值。 NSArray 和 NSMutableArray 也是如此,只是在数组上复制只是将所有指针引用复制到一个新数组,但会阻止删除和添加条目。
【讨论】: