ARC是自iOS 5之后增加的新特性,基本消除了手動(dòng)管理內(nèi)存的煩瑣,編譯器會(huì)自動(dòng)在適當(dāng)?shù)牡胤讲迦氘?dāng)?shù)膔etain、release、autorelease語句。你基本不再需要擔(dān)心內(nèi)存管,這里說的是基本,不是全部,為什么呢,后面的會(huì)講到。
- ARC是編譯器(時(shí))特性,而不是運(yùn)行時(shí)特性,更不是垃圾回收器(GC),而是編譯器特性。這是面試的時(shí)候經(jīng)常被問到
- 實(shí)現(xiàn)原理:
RAC通過控制變量的作用域和強(qiáng)弱指針的限制, - 規(guī)則:
ARC的規(guī)則:只要有一個(gè)強(qiáng)指針變量只想對(duì)象,對(duì)象就會(huì)保持在內(nèi)存中不會(huì)被釋放 - 強(qiáng)/弱指針:
ARC模式下默認(rèn)所有實(shí)例變量都是強(qiáng)指針,強(qiáng)指針持有對(duì)象
弱指針指向的對(duì)象唄回收后,弱指針回制動(dòng)復(fù)制為nil
在ARC有效的情況下編譯源代碼,必須遵守一定的規(guī)則。下面的就是具體的ARC的具體規(guī)則。
- 不能使用使用retain/release/retainCount/autorelease
- 不能使用NSAllocateObject/NSDeallocateObject
- 必須遵守北村管理方法命名規(guī)則
- 不要顯示調(diào)用dealloc
- 使用@autoreleasepool塊替代NSAutoreleasePool
- 不能使用區(qū)域(NSZone)
- 對(duì)象型變量作為c語言結(jié)構(gòu)體(struct/union)的成員
- 顯示轉(zhuǎn)換“id”和“void”