IOS語法 @property裏的assign,copy,retain的區別

@property(nonatomic,copy)NSString* str;多線程

這裏的assign copy retain的區別:iphone

assign:這個是簡單賦值,不更改引用索引計數(reference counting);atom

copy:創建索引計數爲一的對象,而後釋放舊對象;線程

retain:釋放舊對象,將舊對象的值賦予輸入對象,再提升輸入對象的引用索引計數;對象

-retain的實際語法:
索引

-(void)setName(NSString*)newNameip

{內存

  if(name!=newName)資源

{字符串

  [name release];

 name=[newName retain];

name的引用計數has been bumped up by 1;

}

}

assign :是對oc基礎數據類型(CGRect,CGPoint)和C數據類型(float int);

copy:是對字符串NSString;

retain:是對其餘NSObject 和其子類;

atomic是oc使用的一種線程保護技術,是爲了防止在寫未完成的時候被其餘線程讀取,形成數據錯誤,而這種機制是很耗資源的,在iphone這小型設備上若是沒有使用多線程之間的通信,那麼使用nonatomic是一個很是好的選擇

注:

oc的內存管理,第一:retain copy都是在手動內存管理中,賦值oc對象經常使用的防止內存泄露的方法,當A 要賦值給B時,A完成賦值操做後,將本身release,而B則將本身原持有的對象地址release,並持有A的對象及引用計數,這樣就保證兩個數據塊的引用計數始終爲1或0,程序中最後一位引用者release時,才能保證這塊內存被很好的釋放;

相關文章
相關標籤/搜索