自動引用計數(ARC)

 1.1什麼是自動引用技術

  顧名思義,自動引用計數(ARC, Automatic Reference Counting)是指內存管理中對引用採起自動計數的技術。如下摘自蘋果官方說明:程序員

  在Objective-C中採用Automatic Reference Counting(ARC)機制,讓編譯器來進行內存管理。在新一代Apple LLVM編輯器中設置ARC爲有效狀態,就無需再次鍵入retain或者release代碼,這在下降程序崩潰、內存泄露等風險的同時,很大程度上減小了開發程序的工做量。編譯器徹底清楚目標對象,並能馬上釋放那些再也不被使用的對象。如此一來,應用程序將具備可預測性,且能流暢運行,速度也將大幅度提高。編輯器

  這些優勢無疑極具吸引力,但關於ARC技術,最重要的仍是下面這一點:spa

  「在LLVM編譯器中設置ARC爲有效狀態,就無需再次鍵入retain或者release代碼。」code

  換言之,若知足如下條件,就無需手工輸入retain和release代碼了。對象

  • 使用Xcode 4.2或以上版本。
  • 使用LLVM編譯器3.0或以上版本。
  • 編譯器選項中設置ARC爲有效。

  在以上條件下編譯源代碼時,編譯器將自動進行內存管理,這正是每一個程序員求之不得的。在正式講解ARC技術以前,咱們先來了解下程序員在代碼中是如何手動進行內存管理的。blog

1.2 內存管理/引用計數

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的內存管理。以下圖:

相關文章
相關標籤/搜索