IOS中Retain和Copy的區別

來源:互聯網
上載者:User

標籤:io   os   使用   sp   on   問題   bs   ad   as   

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,定義時靜態分配一段記憶體。

IOS中Retain和Copy的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.