objective-c中,記憶體物件分二類:
1) 值型別,如 int、float、struct等基本資料型別;
2) 引用型別,通常是指繼承自nsobject類的oc物件;
值型別在棧中,由系統自動管理,而引用型別在堆上,需要我們自己手工進行管理
oc中提供了二種記憶體管理機制:
1) 手動引用計數 mrc (mannul reference counting);
2) 自動引用計數 arc (automatic reference counting);
主要區別體現在,我們寫**的時候需要自己手動新增retain/release這樣的**
1) alloc 與 release
2) retain 與 release
原則上:誰alloc誰就負責release,誰retain誰負責releasealloc 用來建立物件,建立完成後,引用計數 +1,只呼叫一次
retain 使引用計數 +1,可多次呼叫
release 使引用計數 -1,可多次呼叫
通常屬性retaincount,可知道乙個物件當前被引用的數量,當引用計數為0時,說明此物件沒有被引用,它會被系統從記憶體中銷毀,銷毀之前會呼叫物件的dealloc
在該模式下,不允許使用retain、release、retaincount等方法,並且如果物件實現了dealloc方法時,不允許呼叫[super dealloc]方法。
該模式下轉而替代屬性(property)的修飾詞為strong、weak,相當於手動引用計數下的retain、assign
屬性修飾符由三部分組成, @property(原子性, 訪問控制性, 記憶體管理)
原子性:atomic(預設值)、nonatomic
訪問控制性:readwrite(預設)、readonly
記憶體管理:assign(預設)、retain,arc中建議使用strong、weak進行替代
copy 與strong類似,但區別在於它是對生成的副本擁有所有權而不是傳入的物件
autorelease這裡沒講,深拷貝和淺拷貝這裡也沒講,屬性更沒有具體深入提,這些點如果想真正搞清楚,都可以單獨寫一篇文章詳解
Objective C記憶體管理
objective c的物件記憶體管理是一件非常有意思的事情,由其是在iphone嵌入式裝置中 想玩的省心點,就得熟知它的管理規則,由其是記憶體的管理機制。了解它的品性了才能在cocoa的世界裡如魚得水。否則,反之 如水得魚!1,乙個物件可以有乙個或多個擁有者 2,當它乙個擁有者都沒有時,它就會被 ...
Objective C 記憶體管理
objective c 記憶體管理 nsautoreleasepool pool nsautoreleasepool alloc init pool drain 事實上程式中可以有多個自動釋放池。自動釋放池其實並不包含實際的物件本身,僅僅是對釋放的對 象的引用。通過向目前的自動釋放池傳送一條auto...
Objective C(記憶體管理)
引用計數器 每個oc物件都有乙個佔4個位元組儲存空間的引用計數器 當使用或建立乙個物件時,新物件的引用計數器預設是1 retain 可以使引用計數器 1 release 可以是引用計數器 1 retaincount 獲得當前的引用計數器的值 當物件被銷毀時,會重寫dealloc方法 void dea...