Nonatomic,保留,复制有什么用?

时间:2013-03-11 09:32:49

标签: ios objective-c cocoa memory-management

我搜索了很多,但只对non-atomicretaincopy参数的定义有所区别。我想要一些我尚未得到的确切解释。

请举例说明:为什么我们使用它们以及它们如何工作以及引用计数的作用?

1 个答案:

答案 0 :(得分:1)

非原子中,如果某个setter活动在任何其他线程上进行,则不保证从getter / setter返回整个值。

因此,nonatomic比原子快得多,而且从不线程安全


保留中明确声明您要维护对象的引用,或者您希望成为该对象的所有者,并且必须在它被取消分配之前释放它。它会将引用计数增加1。

-(void)setString:(NSString*)newString{
     
    [newString retain];
     
    [string release];
       
    string = newString;
    
}

副本通常与字符串一起使用,因为制作原始对象的副本可确保在您使用它时不会更改它。

-(void)setString:(NSString*)newString{
 
      if(string!=newString){
                 
          [string release];
                 
          string = [newString copy];
               
     }
}

虽然retain只是递增对象的保留计数,但copy会创建一个具有自己保留计数的新计数。