OC 內存管理之自動內存管理ARC

1、基本簡介

  • ARC是自iOS 5以後增長的新特性,徹底消除了手動管理內存的煩瑣,編譯器會自動在適當的地方插入適當的retain、release、autorelease語句。你再也不須要擔憂內存管理,由於編譯器爲你處理了一切
  • ARC 是編譯器特性,而不是 iOS 運行時特性,它也不是相似於其它語言中的垃圾收集器。所以 ARC 和手動內存管理性能是同樣的,有時還能更加快速,由於編譯器還能夠執行某些優化

2、基本原理

1.規則

  ARC 的規則很是簡單:只要還有一個強指針變量指向對象,對象就會保持在內存中工具

2.強指針和弱指針

  • 默認全部實例變量和局部變量都是Strong指針
  • 弱指針指向的對象被回收後,弱指針會自動變爲nil指針,不會引起野指針錯誤

3、使用注意

  • 不能調用release、retain、autorelease、retainCount
  • 能夠重寫dealloc,可是不能調用[super dealloc]
  • @property : 想長期擁有某個對象,應該用strong,其餘對象用weak
  • 其餘基本數據類型依然用assign
  • 兩端互相引用時,一端用strong、一端用weak

 

4、ARC的開啓和禁止

要想將非ARC的代碼轉換爲ARC的代碼,大概有2種方式:性能

1.使用Xcode的自動轉換工具優化

2.手動設置某些文件支持ARCui

 

1、Xcode的自動轉換工具指針

Xcode帶了一個自動轉換工具,能夠將舊的源代碼轉成ARC模式code

1.ARC是LLVM 3.0編譯器的特性,而現有工程可能使用老的GCC 4.2或LLVM-GCC編譯器,所以首先須要設置使用LLVM 3.0編譯器:對象

(現使用的XCode4.5,LLVM 3.0已經升級到LLVM 4.1)內存

最好也選上Warnings中的Other Warning Flags 爲 -Wall,這樣編譯器就會檢查全部可能的警告,有助於咱們避免潛在的問題編譯器

 

2.Build Options下面的Run Static Analyzer選項也最好啓用,這樣每次Xcode編譯項目時,都會運行靜態代碼分析工具來檢查咱們的代碼內存管理

 

3.設置"Objective-C Automatic Reference Counting"選項爲YES,不過Xcode自動轉換工具會自動設置這個選項,這裏只是說明一下如何手動設置

 

4.打開Xcode的自動轉換工具

 

5.Xcode會顯示一個新窗口,讓你選擇哪些文件須要轉換

點擊Check按鈕,Xcode可能會彈出對話框提示項目不能轉換爲ARC,須要你準備好轉換(這裏暫時省略詳細說明)

 

6.若是沒有什麼警告、錯誤了,就會彈出一下提示窗口:

 

7.點擊Next,幾秒鐘後,Xcode會提示全部文件的轉換預覽,顯示源文件的全部改變。左邊是修改後的文件,右邊是原始文件。在這裏你能夠一個文件一個文件地查看Xcode的修改,以確保Xcode沒有改錯你的源文件:

點擊Save便可完成轉換

 

8.自動轉換以後,Xcode會移除全部retain、release、autorelease調用,這可能會致使代碼出現其它警告、無效語法等,這些都須要本身手工進行修改

注意:Xcode的自動轉換工具最好只使用一次,屢次使用可能會出現比較詭異的問題。假如你第一次轉換沒有轉換全部的文件,當你稍後試圖再次轉換剩餘的文件時,Xcode實際上不會執行任何轉換操做。所以最好一次就完成轉換,沒有轉換的文件能夠考慮手工進行修改

 

2、手動開啓某些文件的ARC

在Compiler Flags一列加上-fobjc-arc就表示開啓這個.m文件的ARC

 

3、禁止某些文件的ARC

在Compiler Flags一列加上-fno-objc-arc就表示禁止這個.m文件的ARC

相關文章
相關標籤/搜索