objective c記憶體管理ARC關鍵字概述

2021-06-20 22:04:38 字數 950 閱讀 8425

簡單來講,只要記住strong和weak就可以了,區域性變數使用__strong和__weak,至於unsafe_unretained是之前低版本時對weak不支援時的weak替代方案,weak比unsafe_unretained安全。

一般情況下都用strong,可能存在迴圈引用或者只是想獲取一下對方的指標,並不想因獲取而使對方無法釋放記憶體的情況下,使用weak。

對於區域性變數,預設是strong,所以一般不用管,只有屬性變數,因為預設是unsafe_unretained的,因此一般都要去指定為weak或者strong。

所以總結起來就一點:屬性變數要指定strong或weak。

1.strong

strong與之前的retain差不多,可以增加屬性引用計數的值。在不需要的時候,需要手動設定屬性為nil。

2.weak

weak是ios5及以上才支援的修飾符。它被稱為「歸零弱引用」。可以只是持有指標而不增加引用計數來避免迴圈保留。當指標指向的記憶體被銷毀後,宣告weak的屬性指標會自動置為nil,這也是它被稱為歸零弱引用的原因。

3.unsafe_unretained

對於ios5以下版本,並不支援arc中的weak宣告,可以用unsafe_unretained宣告來代替weak。unsafe_unretained同樣也是不增加引用計數的值,但它沒有「歸零」的動作,需要手動操作,一般作為支援ios5以下weak的替代方案。

4.__autoreleasing

對於函式中作為函式返回值的區域性變數,需要使用

__autoreleasing

宣告該區域性變數;當

你想傳乙個未初始化地對像引用到乙個方法當中,在此方法中實始化此對像,那麼這種情況函式宣告時需要在變數前加上__autoreleasing,如- (

void

) generateerrorinvariable:(__autoreleasing nserror **)paramerror

Objective C記憶體管理

objective c的物件記憶體管理是一件非常有意思的事情,由其是在iphone嵌入式裝置中 想玩的省心點,就得熟知它的管理規則,由其是記憶體的管理機制。了解它的品性了才能在cocoa的世界裡如魚得水。否則,反之 如水得魚!1,乙個物件可以有乙個或多個擁有者 2,當它乙個擁有者都沒有時,它就會被 ...

Objective C 記憶體管理

objective c 記憶體管理 nsautoreleasepool pool nsautoreleasepool alloc init pool drain 事實上程式中可以有多個自動釋放池。自動釋放池其實並不包含實際的物件本身,僅僅是對釋放的對 象的引用。通過向目前的自動釋放池傳送一條auto...

Objective C 記憶體管理

objective c中,記憶體物件分二類 1 值型別,如 int float struct等基本資料型別 2 引用型別,通常是指繼承自nsobject類的oc物件 值型別在棧中,由系統自動管理,而引用型別在堆上,需要我們自己手工進行管理 oc中提供了二種記憶體管理機制 1 手動引用計數 mrc m...