最新版本iOS內存管理

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相反。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 內存管理 簡述OC中內存管理機制。與retain配對使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 1,989評論 1 16
  • iOS內存管理 概述 什么是內存管理 應用程序內存管理是在程序運行時分配內存(比如創建一個對象,會增加內存占用)與...
    蚊香醬閱讀 5,758評論 8 119
  • 內存管理的基本范圍和概念. 程序運行過程中藥創建大量的對象, 和其他高級語言類似,在ObjC中對象存儲在堆區,程序...
    ValienZh閱讀 903評論 0 2
  • Cocoa內存管理機制 (1)當你使用new、alloc、copy方法創建一個對象時,該對象的保留計數器值為1.當...
    John_LS閱讀 2,809評論 0 6
  • 和丫頭正在看書,突然她很嚴肅的站起來說:下周四我要講故事。 我說是陳老師說的嗎? 她點了點頭說是的。 然后我笑了:...
    小玩子8閱讀 195評論 0 0