1 ,可讀性: readonly 、 readwrite
@PRoperty(readwrite,....) valueType value;
這個屬性是變量的默認屬性,就是如果你 (readwrite and readonly 都沒有使用,那么你的變量就是 readwrite 屬性 ) ,通過加入 readwrite 屬性你的變量就會有 get 方法,和 set 方法。
property(readonly,...) valueType value;
這個屬性變量就是表明變量只有可讀方法,也就是說,你只能使用它的 get 方法。
2 , assign , setter 方法直接賦值,不進行任何 retain 操作,為了解決原類型與環循引用問題
3 , retain , setter 方法對參數進行 release 舊值再 retain 新值,所有實現都是這個順序
4 , copy , setter 方法進行 Copy 操作,與 retain 處理流程一樣,先舊值 release ,再 Copy 出新的對象, retainCount 為 1 。這是為了減少對上下文的依賴而引入的機制。
5 , nonatomic ,非原子性訪問,不加同步,多線程并發訪問會提高性能。
注意,如果不加此屬性,則默認是兩個訪問方法都為原子型事務訪問。鎖被加到所屬對象實例級 。 所以 不加 nonatomic 對與多線程是安全的 。
附網文:
Retain vs. Copy
copy : 建立一個索引計數為 1 的對象,然后釋放舊對象
retain :釋放舊的對象,將舊對象的值賦予輸入對象,再提高輸入對象的索引計數為 1
那上面的是什么該死的意思呢?
Copy 其實是建立了一個相同的對象,而 retain 不是:
比如一個 NSString 對象,地址為 0×1111 ,內容為 @”STR”
Copy 到另外一個 NSString 之后,地址為 0×2222 ,內容相同,新的對象 retain 為 1 ,舊有對象沒有變化
retain 到另外一個 NSString 之后,地址相同(建立一個指針,指針拷貝),內容當然相同,這個對象的 retain 值 +1
也就是說, retain 是指針拷貝, copy 是內容拷貝。
注:NSString 類舉例是錯誤的。NSString沒有retain,定義時靜態分配一段內存。
新聞熱點
疑難解答