iOS複習筆記9:ARC功能,ios複習筆記arc
一 ARC簡介
ARC是編輯器的一種功能。
它會把alloc出來的對象,自動release。
它把使用retain屬性的變數,在dealloc中自動產生release;
在建立項目時選中ARC功能後,不允許調用:
retain
retainCount
release
autorelease
[super dealloc]
二 ARC的判斷準則
1 準則:只要沒有強指標對象,就會銷毀對象
2 指標分兩種:
1 強指標: __strong,預設情況下所有的指標都是強指標
2 弱指標: __weak,弱指標指向的對象不存在時會被清空
三 強指標程式碼範例:
Person* p = [[Person] init];p = nil;// 清null 指標,沒有強指標指向記憶體對象,對象就會釋放
或者
p = [[Person] init];// 指標指向了另一個對象,前面分配的記憶體對象就是釋放
Person* person1 = [[Person] init];Person* person2 = person1;person1 = nil;// 函數執行完之後才銷毀
弱指標程式碼範例:
Person* person1 = [[Person] init];__weak Person person2 = p;person1 = nil;// 對象銷毀
注意如下錯誤寫法:
__weak Person* person1 = [[Person] init];// 會有警告,建立出來的對象會被立馬釋放
四 property屬性參數
1 strong:用於OC對象,成員變數時“強”指標
strong替換retain,不需要在dealloc中release,功能跟retain一樣
例如:
@property(nonatomic, strong) Book* book;
2 weak:用於OC對象,成員變數時“弱”指標
strong替換assign,book指向對象銷毀時,會被自動清空
@property(nonatomic, weak) Book* book;
3 assign:用於基礎資料類型
五 Xcode的ARC轉換功能
1 項目轉換成ARC
Edit->Refactor->Convert to Object-C ARC,check,next;
然後會出現一個預覽,可以看到release,autorelease被刪除了,
property的retain變成了strong。
然後點擊Save,Enable,就OK啦。
2 相容非ARC
點擊項目->Build Phases:Complie Source,可以看到項目中的源檔案,
選中不需要使用ARC的源檔案斷行符號,輸入:
-fno-objc-arc
這樣就可以在該檔案中使用非ARC相關的東西了。
3 非ARC項目相容ARC
在2中輸入:
-f-objc-arc
這樣在非ARC項目中,就可以相容ARC檔案了。
六 ARC中循環參考
相互持有的對象,將生命週期短的property設定為weak