你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS 對象屬性詳細引見

iOS 對象屬性詳細引見

編輯:IOS開發綜合

IOS 對象屬性

oc對象的一些屬性:

retain,strong, copy,weak,assign,readonly, readwrite, unsafe_unretained

上面來辨別講講各自的作用和區別:

retain,計數器加1, (添加一個指向內存的指針) 對應release(計數器-1) setter 辦法對參數停止 release 舊值再 retain 新值,一切完成都是這個順序

- (void)setBackView:(UIView *)backView {

  if (_backView != backView) {

    [_backView release];

    _backView = [backView retain];
  }

  return _backView;
}

copy, 拷貝,新開地址,內容拷貝, setter 辦法停止 Copy 操作,與 retain 處置流程一樣,先舊值 release ,再 Copy 出新的對象, retainCount 為 1 。這是為了增加對上下文的依賴而引入的機制。

(提一點深拷貝shallow copy,淺拷貝deep copy)

這篇文章比擬直觀(http://blog.csdn.net/omegayy/article/details/7311839)

官方文檔(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Collections/Articles/Copying.html)

copy和mutableCopy調用後表現的行為究竟是什麼樣完成取決於類自身NSCopying和NSMutableCopying協議是如何完成的。

 strong, 強援用,計數器加1,和retain一樣(對應retain和copy)

weak,弱援用

strong 用來修飾強援用的屬性;

@property (strong) SomeClass * aObject; 
對應原來的 
@property (retain) SomeClass * aObject; 和 @property (copy) SomeClass * aObject; 

weak 用來修飾弱援用的屬性;
@property (weak) SomeClass * aObject; 
對應原來的 
@property (assign) SomeClass * aObject; 

__weak, __strong 用來修飾變量,此外還有 __unsafe_unretained, __autoreleasing 都是用來修飾變量的。
__strong 是缺省的關鍵詞。
__weak 聲明了一個可以自動 nil 化的弱援用。
__unsafe_unretained 聲明一個弱使用,但是不會自動nil化,也就是說,假如所指向的內存區域被釋放了,這個指針就是一個野指針了。
__autoreleasing 用來修飾一個函數的參數,這個參數會在函數前往的時分被自動釋放。

strong和weak的區別

(weak和strong)不同的是 當一個對象不再有strong類型的指針指向它的時分 它會被釋放  ,即便還有weak型指針指向它。

一旦最後一個strong型指針離去 ,這個對象將被釋放,一切剩余的weak型指針都將被肅清。

能夠有個例子描述是妥當的。

想象我們的對象是一條狗,狗想要跑掉(被釋放)。

strong型指針好像是栓住的狗。只需你用牽繩掛住狗,狗就不會跑掉。假如有5團體牽著一條狗(5個strong型指針指向1個對象),除非5個牽繩都零落 ,否著狗是不會跑掉的。

weak型指針好像是一個小孩指著狗喊到:“看!一只狗在那” 只需狗不斷被栓著,小孩就能看到狗,(weak指針)會不斷指向它。只需狗的牽繩零落,狗就會跑掉,不論有多少小孩在看著它。

只需最後一個strong型指針不再指向對象,那麼對象就會被釋放,同時一切的weak型指針都將會被肅清。

assign,用於復雜類型,計數器不加,直接賦值,一個指針,一塊地址, setter 辦法直接賦值,不停止任何 retain 操作,為理解決原類型與環循援用問題

readonly,只讀,只生成get辦法,沒有set辦法

readwrite,默許,可讀寫,set,get辦法都會生成

unsafe_unretained,相似weak,所謂的unSafe就是指會容易呈現也指針的狀況,慎用

setter = xxxx,聲明對象的set辦法

getter = xxxx, 聲明對象的get辦法

nonatomic,非原子操作,零碎不添加代碼,運轉速度絕對快,但數據操作在多線程狀況下絕對不平安

atomic,原子操作,編譯時會添加很多加鎖解鎖代碼,數據操作在多線程狀況下絕對平安

* 運用assign: 對根底數據類型 (NSInteger)和C數據類型(int, float, double, char,等)
* 運用copy: 對NSString
* 運用retain: 對其他NSObject和其子類

感激閱讀,希望能協助到大家,謝謝大家對本站的支持!

【iOS 對象屬性詳細引見】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved