Objective C 記憶體管理

2021-09-08 10:56:52 字數 1167 閱讀 6929

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誰負責release

alloc 用來建立物件,建立完成後,引用計數 +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...