atomic:
原子操作(原子性是指事務的乙個完整操作,操作成功就提交,反之就回滾. 原子操作就是指具有原子性的操作)在objective-c 屬性設定裡面 預設的就是atomic
,意思就是 setter /getter函式是乙個原子操作,如果多執行緒同時呼叫setter時,不會出現某乙個執行緒執行完setter所有語句之前,另乙個執行緒就開始執行setter,相當於 函式頭尾加了鎖
. 這樣的話 併發訪問效能會比較低
.nonatomic:
非原子操作 一般不需要多執行緒支援的時候就用它,這樣在 併發訪問的時候效率會比較高
. 在objective-c裡面通常物件型別都應該宣告為非原子性的. ios中程式啟動的時候系統只會自動生成乙個單一的主線程.程式在執行的時候一般情況下是在同乙個執行緒裡面對乙個屬性進行操作. 如果在程式中 我們確定某乙個屬性會在多執行緒中被使用,並且需要做資料同步,就必須設定成原子性的,但也可以設定成非原子性的,然後自己在程式中用加鎖之類的來做資料同步.
在標頭檔案中宣告屬性的時候使用atomic 和 nonatomic等價於在標頭檔案裡面新增2個函式乙個是用於設定這個屬性的,乙個是用於讀取這個屬性,例如:- (nsstring *)name; - (void)setname:(nsstring *)str;
atomic / nonatomic 需要和@synthesize/@dynamic配和使用才有意義.
@synthesize
如果沒有實現setter和getter方法,編譯器將會自動在生產setter和getter方法。
@dynamic
表示變數對應的屬性訪問器方法 , 是動態實 現的 , 你需要在 nsobject 中繼承而來的+(bool) resolveinstancemethod:(sel) sel 方法中指定 動態實現的方法或者函式。
屬性修飾其他關鍵字:
getter=gettername
指定 get 方法,並需要實現這個方法
。必須返回與宣告型別相同的變數,沒有引數
setter=settername
指定 set 方法,並需要實現這個方法
。帶乙個與宣告型別相同的引數,沒有返回值(返回空值)
當宣告為 readonly 的時候,不能指定 set 方法
readwrite
如果沒有宣告成 readonly ,那就 預設是 readwrite
。可以用來賦值,也可以被賦值
readonly
不可以被賦值
assign
所有屬性都 預設 assign
,通常用於標量(簡單變數 int , float , cgrect 等)
一種典型情況是用在對物件沒有所有權的時候,通常是 delegate ,避免造成死迴圈(如果用 retain 的話會死迴圈)
retain
屬性必須是 objc 物件,擁有物件所有權,必須在 dealloc 中 release 一次。
copy
屬性必須是 objc 物件,擁有物件所有權,必須在 dealloc 中 release 一次。且屬性必須實現 nscopying 協議
一般常用於 nsstring 型別
原文
屬性關鍵字
從atomic關鍵字說到多執行緒安全 內含ios給 加鎖方法總結 自旋鎖和互斥鎖區別 屬性關鍵字 ios屬性關鍵字 nonatomic 關於執行緒安全 讀寫許可權 引用計數 unsafe unretained weak copy atomic是預設的原子操作關鍵字,atomic也就代表其具有原子性 ...
IOS 屬性關鍵字
ios 5之後便支援arc了,在arc的情況下物件引用分為 strong強引用 乙個物件如果有乙個及以上的強引用指向它,那麼他將不會釋放 weak弱引用 乙個物件如果只有弱應用指向它,那麼它將被釋放掉 注 兩個物件若相互保留對方的強引用,那麼會照成記憶體洩漏。其他 copy 物件的複製,複製之後得到...
iOS屬性關鍵字
常用的屬性關鍵字 assign,weak,unsafe unretained,strong,retain copy,readonly,readwrite nonatomic,natomic及 weak,block synthesize 和 dynamic,只有準確的理解了他們的原理,用起來才能得心應...