objective-c中提供了兩種記憶體管理機制mrc(mannul reference counting)和arc(automatic reference counting),分別提供對記憶體的手動和自動管理,來滿足不同的需求。ios5開始. xcode4.2開始就支援arc。xcode7 預設支援arc開發.預設使用的開發方式就是arc的模式.在ios 5(xcode 4.2)以後加入了arc機制,不需要再呼叫retain/release方法管理記憶體了,但這並不是說arc會自動**記憶體,它只是自動加入了retain/release的**,oc的記憶體管理機制依然是計數機制。assign生成的set方法中依然不會被自動加入retain/release**。
oc的記憶體管理是基於引用計數器個數來管理的。當物件的引用計數器變為0的時候,系統會自動**物件.在系統**物件的時候.會自動的呼叫物件的dealloc方法.重寫dealloc方法的規範:必須要呼叫父類的dealloc方法. 並且要放在最後一句**.
retain,release和autorelease。retain和release方法操作的是引用記數,當引用記數為零時,便自動釋放記憶體。並且可以用nsautoreleasepool物件,autorelease實際上只是把對release的呼叫延遲了,對於每乙個autorelease,系統只是把該object放入了當前的autorelease pool中,當該pool被釋放時,該pool中的所有object會被呼叫release。
新建立1個物件,這個物件的引用計數器retaincount的值預設是1.當物件的引用計數器變為0的時候.物件就會被系統立即** 並自動呼叫dealloc方法.為物件傳送retain訊息 物件的引用計數器就會+1。為物件傳送release訊息.並不是**物件.而是讓物件的引用計數器-1,當物件的引用計數器的值變為0的時候.物件才會被系統立即**.
(1) retain,當多1個人使用這個物件的時候,應該先為這個物件傳送retain訊息.該方法的作用是將記憶體資料的所有權附給另一指標變數,引用數加1,即retaincount+= 1;
(2) 當少1個人使用這個物件的時候.應該為這個物件傳送1條release訊息.release,該方法是釋放指標變數對記憶體資料的所有權,引用數減1,即retaincount-= 1;
(3) autorelease,該方法是將該物件記憶體的管理放到autoreleasepool中。
1). 有物件的建立,就要匹配1個release
2). retain的次數和release的次數要匹配.
3). 誰用誰retain. 誰不用誰release.
誰負責retain 誰就負責relase
4). 只有在多1個人用的時候才retain 少1個人使用的時候才release
有始有終,有加就有減. 有retain就應該匹配1個release 一定要平衡.
OC 記憶體管理之MRC
隨著蘋果對xcode的逐步優化,arc記憶體管理方式已經深入人心,但現實是當下某些公司的一些老的專案可能還是用mrc模式寫的。所以這兩種方式我們都應該掌握。mrc mannulreference counting,顧名思義,就是手動記憶體管理。1 管理的物件 一切繼承自nsobject,在堆區申請記...
iOS開發之oc(十一) 記憶體管理MRC
掌握內容 理解記憶體管理的原理 1.理解部分 1點選工程 build settings 通過gar關鍵字的搜尋搜出automatic re.cou.將此選項的設定改稱no 1.2.2析構函式 可以用來驗證物件是否被釋放 語法 void dealloc void setdog dog dog void...
OC 訊息機制
任何資料結構,只要在恰當的位置具有乙個指標指向乙個class,那麼,它都可以被認為是乙個物件 在oc中,乙個物件所屬於哪個類,是由它的isa指標指向的。這個isa指標指向這個物件所屬的class 執行原理 當向oc物件傳送訊息時,執行時庫會根據物件的isa指標找到這個物件所屬的類。這個類會包含乙個所...