IOS 內存管理
1.MRC(人工引用計數),手動管理內存。
MRC模式下,所有的對象都需要手動的添加retain、release代碼來管理內存。使用MRC,需要遵守誰創建,誰回收的原則。也就是誰alloc,誰release;誰retain,誰release。
當引用計數為0的時候,必須回收,引用計數不為0,不能回收,如果引用計數為0,但是沒有回收,會造成內存泄露。如果引用計數為0,繼續釋放,會造成野指針。為了避免出現野指針,我們在釋放的時候,會先讓指針=nil。
2.ARC(自動引用計數),自動管理內存。
ARC是IOS5推出的新功能,通過ARC,可以自動的管理內存。在ARC模式下,只要沒有強指針(強引用)指向對象,對象就會被釋放。在ARC模式下,不允許使用retain、release、retainCount等方法。并且,如果使用dealloc方法時,不允許調用[super dealloc]方法。
ARC模式下的property變量修飾詞為strong、weak,相當于MRC模式下的retain、assign。strong :代替retain,缺省關鍵詞,代表強引用。weak:代替assign,聲明了一個可以自動設置nil的弱引用,但是比assign多一個功能,指針指向的地址被釋放之后,指針本身也會自動被釋放。
三、與內存有關的修飾符
strong :強引用,ARC中使用,與MRC中retain類似,使用之后,計數器+1。
weak :弱引用 ,ARC中使用,如果只想的對象被釋放了,其指向nil,可以有效的避免野指針,其引用計數為1。
readwrite : 可讀可寫特性,需要生成getter方法和setter方法時使用。
readonly : 只讀特性,只會生成getter方法 不會生成setter方法,不希望屬性在類外改變。
assign :賦值特性,不涉及引用計數,弱引用,setter方法將傳入參數賦值給實例變量,僅設置變量時使用。
retain :表示持有特性,setter方法將傳入參數先保留,再賦值,傳入參數的retaincount會+1。
copy :表示拷貝特性,setter方法將傳入對象復制一份,需要完全一份新的變量時。
nonatomic :非原子操作,不加同步,多線程訪問可提高性能,但是線程不安全的。決定編譯器生成的setter getter是否是原子操作。
atomic :原子操作,同步的,表示多線程安全,與nonatomic相反。