什麼是ARC?spa
ARC的全稱Auto Reference Counting. 也就是自動引用計數。那麼,爲何要有ARC呢?指針
Objective C的引用計數理解起來很容易,當一個對象被持有的時候計數加一,再也不被持有的時候引用計數減一,當引用計數爲零的時候,說明這個對象已經無用了,則將其釋放。code
ARC :ARC 是編譯器特性,當編譯器發現retain或者alloc,自動幫咱們插入內存管理代碼:release,對象
引用計數分爲兩種:blog
手動引用計數(MRC)內存
自動引用計數(ARC)編譯器
好比以下ARC代碼:it
NSObject * obj; { obj = [[NSObject alloc] init]; //引用計數爲1 } NSLog(@"%@",obj);
等同於以下MRC代碼內存管理
NSObject * obj; { obj = [[NSObject alloc] init]; //引用計數爲1 [obj relrease] } NSLog(@"%@",obj);
ARC它的判斷準則:只要沒有強指針指向對象,對象就會被釋放編譯
指針分兩種:
強指針:默認狀況下都是強指針,__stong(雙下劃線)
弱指針:__weak
__weak Person *p = []; NSLog(@"%@",p); // 錯誤的寫法
兩端循環引用的時候:
ARC:
一端用strong,另外一端weak
非ARC:
一端用retain,另外一端assign
ARC :總結
1>不容許調用release,retain,retainCount
2>能夠重寫dealloc,可是不能夠調用[super dealloc];
3>@property參數
*strong:成員變量是強指針(適用於OC對象,默認的)
*weak:成員變量是弱指針(做用跟assign同樣)(適用於OC對象)
*assign:非對象