顧名思義,自動引用計數(ARC, Automatic Reference Counting)是指內存管理中對引用採起自動計數的技術。如下摘自蘋果官方說明:程序員
在Objective-C中採用Automatic Reference Counting(ARC)機制,讓編譯器來進行內存管理。在新一代Apple LLVM編輯器中設置ARC爲有效狀態,就無需再次鍵入retain或者release代碼,這在下降程序崩潰、內存泄露等風險的同時,很大程度上減小了開發程序的工做量。編譯器徹底清楚目標對象,並能馬上釋放那些再也不被使用的對象。如此一來,應用程序將具備可預測性,且能流暢運行,速度也將大幅度提高。編輯器
這些優勢無疑極具吸引力,但關於ARC技術,最重要的仍是下面這一點:spa
「在LLVM編譯器中設置ARC爲有效狀態,就無需再次鍵入retain或者release代碼。」code
換言之,若知足如下條件,就無需手工輸入retain和release代碼了。對象
在以上條件下編譯源代碼時,編譯器將自動進行內存管理,這正是每一個程序員求之不得的。在正式講解ARC技術以前,咱們先來了解下程序員在代碼中是如何手動進行內存管理的。blog
1.2.1概要內存
Objective-C中的內存管理,也就是引用計數。能夠用開關房間的燈爲例來講明引用計數的機制。資源
假設辦公室的照明設備只要一個,上班進入辦公室的人須要照明,因此須要把燈打開。而對於下班離開辦公室的人來講,已經不須要照明瞭,因此要把燈關掉。如果不少人上下班,每一個人都開燈或者關燈,那麼辦公室的狀況又將如何呢?最先下班離開的人若是關了燈,辦公室裏還沒走的全部人都將處於一片黑暗之中。作用域
解決這一問題的辦法,是使辦公室在還有至少一人的狀況下保持開燈狀態,而在無人時保持關燈狀態。開發
(1) 最先進入辦公室的人開燈。
(2) 以後進入辦公室的人,須要照明。
(3) 下班離開辦公室的人,不須要照明。
(4) 最後離開辦公室的人關燈(此時已無人須要照明)
爲判斷是否還有人在辦公室裏,這裏導入計數功能來計算"須要照明的人數"。流程以下:
(1) 第一我的進入辦公室,「須要照明的人數」 +1.計數值從0變成了1,所以要開燈。
(2) 以後每當有人進入辦公室,「須要照明的人數」 就+1。計數值從1變成2。
(3) 每當有人下班,離開辦公室,「須要照明的人數」就-1。計數值從2變成1.
(4) 最後一我的下班,離開辦公室時,「須要照明的人數」 -1.計數值從1變成0,所以要關燈。
這樣就能在不須要照明的時候保持關燈狀態。辦公室僅有的照明設備獲得了很好的管理。
在Objective-C中,「對象」至關於辦公室的照明設備。在現實世界中,辦公室的照明設備只有一個,但在Objective-C中的世界裏,雖然計算機資源有限,但一臺計算機能夠同時處理好幾個對象。
此外,「對象的使用環境」至關於上班進入辦公室的人,雖然這裏的「環境」有時也指在運行中的程序代碼、變量、變量做用域、對象等,但在概念上就是使用對象的環境。上班進入辦公室的人對辦公室照明設備發出的動做,與Objective-C中的對應關係則以下表所示:
對照明設備所作的動做 | 對Objective-C對象所作的動做 |
開燈 | 生成對象 |
須要照明 | 持有對象 |
不須要照明 | 釋放對象 |
關燈 | 廢棄對象 |
使用計數功能計算須要照明的人數,使辦公室的照明獲得了很好的管理。一樣,使用引用計數功能,對象也就能獲得很好的管理,這就是Objective-C的內存管理。以下圖: