"复制"和"保留"有什么区别?

sen*_*thu 30 copy objective-c nsstring retain

是什么区别copy,并retainNSString

- (void)setString:(NSString*)newString
{
    string = [newString copy];
}
Run Code Online (Sandbox Code Playgroud)

Mal*_*eur 46

在一般设置中,保留对象会使其保留计数增加1.这将有助于将对象保留在内存中并防止其被吹走.这意味着,如果您只保留其保留版本,则与任何传递给您的人共享该副本.

无论如何复制对象都应该创建具有重复值的另一个对象.将此视为克隆.你不与任何传递给你的人分享克隆.

NSString特别是在与s 打交道时,你可能无法假设任何给你的人NSString都是真的给你一个NSString.有人可能会给你一个子类(NSMutableString在这种情况下),这意味着他们可能会修改封面下的值.如果您的应用程序依赖于传入的值,并且有人对您进行更改,则可能会遇到麻烦.

  • 应该提到的是,对于大多数不可变的`Foundation`类,`copy`等同于`retain`. (16认同)
  • 可能我建议"你**分享***实例*与谁通过它给你"比"你**分享***复制*与谁通过它给你"?(看起来我们已经在谈论复制了) (3认同)

iTa*_*ayb 24

保留和复制是两回事,第一个是概念上的引用,而第二个是按值调用.


iPh*_*BIe 10

保留:在创建的对象上完成,它只会增加引用计数.

copy - 它创建一个新对象,当创建新对象时,retain count将为1.

希望这个帮助你... :)


NSD*_*umb 6

这是一个老帖子,但这是我对这个问题的看法

保留将对象的保留计数增加1并获取对象的所有权.

复制将复制存储器位置中存在的数据,并将其分配给变量,因此在复制的情况下,您首先从一个位置复制数据,将其分配给变量,这会增加保留计数.

请记住,保留适用于引用和复制工作的价值


小智 5

如果使用retain,则将指针值从原始值复制.retain也将引用计数增加1.但是在复制的情况下,它复制指针引用的数据并将其分配给复制的实例变量.