基本簡介
- ARC是Automatic Reference Counting(自動(dòng)引用計(jì)數(shù)器)的簡稱。
- ARC是ios5.0引入的新特性,完全消除手動(dòng)管理內(nèi)存的繁瑣,編譯器會(huì)自動(dòng)在適合的代碼里面插入適當(dāng)?shù)膔etain,release,autorelease的語句。我們不要再擔(dān)心內(nèi)存管理,因?yàn)榫幾g器幫我們做了這一切。
- ARC是編譯器的特性,并非運(yùn)行時(shí)的特性,也不是其他編程語言中的垃圾回收器。因此自動(dòng)管理和手動(dòng)管理內(nèi)存其實(shí)一樣的,但是自動(dòng)管理更加快速,因?yàn)榫幾g器執(zhí)行某些優(yōu)化。
基本原理
- ARC的規(guī)則就是只要對(duì)象沒有強(qiáng)指針引用,就會(huì)被釋放掉,換而言之 只要還有一個(gè)強(qiáng)引用指針變量指向?qū)ο螅敲催@個(gè)對(duì)象就會(huì)存在內(nèi)存中。弱指針指向的對(duì)象,會(huì)被自動(dòng)變成空指針(nil指針),從而不會(huì)引發(fā)野指針錯(cuò)誤。
基本使用
-
ARC設(shè)置如下
028B1D47-5AFC-4CD9-8996-663D6F5F4BBA.png -
ARC模式下 retain ,release,retainCount 是不能夠調(diào)用的。
例子1
7F6ACD2D-DED5-497C-9ACF-912B1C3081F0.png
例子2
dealloc可以重寫,但是不能用[super dealloc],編譯器會(huì)報(bào)錯(cuò)。

0725DA76-0AF9-4C60-B330-1C1F8378F363.png
例子3

941E4E52-DC62-423E-A81B-93EB5FD0CB3F.png

DDD75C44-DCAA-4D68-83D3-4F8988BB4188.png
例子4

2C8CBF67-16E2-4119-A787-DCA77926608E.png

4D0E2D6F-F1E8-4CC1-8155-69D2EFF69646.png
例子5__weak弱指針

7BA16564-2CAE-427D-AE63-84B9544AEDA3.png
注意使用事項(xiàng)
- 循環(huán)引用
解決辦法:一段用強(qiáng)引用,一段用弱引用。outlet的控件屬性都是weak修飾,因?yàn)樗麄円呀?jīng)被父控件強(qiáng)引用。
2.ARC只對(duì)OC對(duì)象的進(jìn)行內(nèi)存管理,對(duì)于CoreFundation的api使用,他的對(duì)象所有權(quán)沒有移交給OC對(duì)象管理,都需要手動(dòng)去釋放。

