關於ARC和MRC

1 ARC是IOS5.0之後才支持,IOS7.0之後,強制使用ARC
2 ARC Automatic Refercences Counting
3 原理
 依然使用引用計數器來管理內存,只是引用計數器的操做方式不一樣,由程序員發送消息轉換爲編譯器幫咱們發送消息,會在合適的位置自動加入retain、release、autorelease消息來進行計數管理,ARC是一種編譯期語法。
4 使用ARC
* 在ARC中,程序中不能出現retain、release、autorelease
* 在ARC中,程序不能在dealloc方法中顯示調用父類的dealloc方法,一切在MRC中和內存相關的操做,ARC中都不能使用。
5 強引用
* 在程序中定義的引用,默認就是強引用,所謂的強引用指向一個對象時,對象的引用計數器會自動加1,當引用超出做用域,對象的引用計數器自動減1,
* 定義強引用:__Strong Student* stu = [[Student alloc] init];
* 當一個對象被引用指向時,此對象會隱式的retain一次,當強引用超出做用域時,指向的對象會隱式的release一次
* 引用在使用的時候,會根據做用域的範圍,自動作加1減1操做
6 弱引用
__weak Student* stu = [[Student alloc] init];
* 僅僅就是指向對象,
* 當一個弱引用指向的對象,未銷燬時,向對象發送消息,會自動變爲強引用
* 當一個弱引用指向的對象被銷燬時,弱引用自己會自動的賦值爲nil
7 定義屬性的時候,內存管理的描述
@property(nonatomic,strong)
@property(nonatomic,weak)
修改arc爲yes方法:點擊項目名稱->在搜索框輸入arc->找到Object-C Automatic Refercences Counting修改成yes
8 其餘修飾關鍵字
@property(nonatomic,__unsafe__unretained)int age;
*__unsafe__unretained等同於assign,功能和weak幾乎同樣,惟一的不一樣,沒有"zeroing weak reference",一般用在基本數據類型
* __autoreleaseing用在方法的返回值,將返回值的對象放入到自動釋放池中。
9 dealloc方法
在ARC中,dealloc方法不容許調用父類 的dealloc方法,固然也不容許向任何對象發送release消息,因此說dealloc方法幾乎不用,在一些特殊狀況下須要重寫dealloc方 法。一、在類中使用了C語言中的函數malloc分配內存。二、在類中使用了C++語言中的函數new等方式建立內存空間。此時須要在dealloc中對 這些特殊的空間進行釋放。
10 聲明引用自動置空
* 在ARC下,若是定義了一個引用沒有賦值,編譯會自動的初始化設置引用爲空值,Student* stu;
* 爲了尊重C語言的規範,基本數據類型沒有初始化,依然是垃圾值。
11 MRC和ARC的混用
* 把MRC的代碼轉換成ARC的代碼,刪除內存管理操做(手動)
* xcode提供了自動將MRC轉換成ARC的功能,操做菜單欄edit -> Refacotor(重構) -> Convert to Objective-C ARC
* 在ARC項目中繼續使用MRC編譯的類,在編譯選項中標識MRC文件便可"-fno-objc-arc"
* 在MRC項目中繼續使用ARC編譯的類在編譯選項中標識MRC文件便可"-fobjc-arc"
相關文章
相關標籤/搜索