iOS 宣告屬性關鍵字講解

2022-03-26 07:31:25 字數 1827 閱讀 8018

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 型別

iOS 宣告屬性關鍵字講解

atomic 原子操作 原子性是指事務的乙個完整操作,操作成功就提交,反之就回滾.原子操作就是指具有原子性的操作 在objective c 屬性設定裡面預設的就是atomic,意思就是setter getter函式是乙個原子操作,如果多執行緒同時呼叫setter時,不會出現某乙個執行緒執行完sett...

IOS 屬性關鍵字

ios 5之後便支援arc了,在arc的情況下物件引用分為 strong強引用 乙個物件如果有乙個及以上的強引用指向它,那麼他將不會釋放 weak弱引用 乙個物件如果只有弱應用指向它,那麼它將被釋放掉 注 兩個物件若相互保留對方的強引用,那麼會照成記憶體洩漏。其他 copy 物件的複製,複製之後得到...

iOS屬性關鍵字

常用的屬性關鍵字 assign,weak,unsafe unretained,strong,retain copy,readonly,readwrite nonatomic,natomic及 weak,block synthesize 和 dynamic,只有準確的理解了他們的原理,用起來才能得心應...