iOS開發 漫談記憶體管理(一)

2021-09-07 12:05:06 字數 1336 閱讀 9980

1、mrc與arc

蘋果提供兩種記憶體管理機制:一種是mrc(manual reference count),即手動引用計數;還有一種是arc(auto reference count)。即自己主動引用計數。

手動引用計數,顧名思義。須要程式猿主動呼叫retain、release等方法來管理記憶體。而自己主動引用計數方式,則是編譯器在編譯階段把記憶體管理**自己主動插入在須要手動呼叫的地方。這樣就把程式猿從複雜的記憶體管理工作中解放出來,將很多其它精力放在實現詳細的業務邏輯上。須要注意的是。arc要在xcode4.2或者以上版本號、llvm編譯器3.0版本號下才幹使用。

2、引用計算的實現方式

一種是gnustep的實現方式:物件生成的時候,在物件的頭部加入retained屬性。表示該物件的引用計數,retain方法呼叫時retained加1,release方法被呼叫時,retained減1。當retained計數為0時。釋放該物件。

3、記憶體管理的思考方式

a、自己生成的物件,自己持有

id obj = [[nsobject alloc] init]; //此時,物件被生成,而且obj持有該物件。
該系列方法包含:alloc、new、copy和mutablecopy

b、非自己生成的物件,自己也能持有

id obj = [nsmutablearrray array];//物件被生成,且obj指向該物件。可是obj並不持有該物件,須要呼叫[obj retain]才幹真正持有
c、不再須要自己持有的物件時釋放

d、非自己持有的物件無法釋放

新手可能非常難注意並理解第二條規則。它是怎樣做到的呢,實現方式大概例如以下:

- (id) object

4、關於autorelease

autorelease使用物件在超出制定的生存範圍時可以自己主動並正確釋放,類似於c語言中的自己主動變數。autorelease的典型使用方法例如以下:

nsautoreleasepool *pool = [[nsautoreleasepool] alloc init];

id obj = [[nsobject alloc] init];

[obj autorelease];

[pool drain]; //pool物件廢棄時。[obj release]方法自己主動被呼叫

ps:文章大部分思想摘自《objective-c高階程式設計》一書,權當個人讀書總結吧。

IOS開發中的記憶體管理(一)

所能占用的記憶體是有限制的。所占用的記憶體較多時,系統會發出記憶體警告,這時得 一些不需要再使用的記憶體空間。管理範圍 任何繼承了 nsobject 的物件,對其他基本資料型別 int char float double struct enum 等 無效 每個oc 物件都有自己的引用計數器,是乙個整...

ios開發記憶體管理要點

一 使用nsmutablearray例項時的三個記憶體管理要點 1.物件加入nsmutablearray例項時,物件會收到retain訊息 陣列物件會成為該物件的擁有方,並得到乙個指向該物件的指標。2.物件從nsmutablearray例項移出時,會收到release訊息 陣列物件會放棄該物件的所有...

iOS記憶體管理 一

1.內總管理原則 引用計數 ios的物件都繼承於nsobject,該物件有乙個方法 retaincount 記憶體引用計數。引用計數在很多技術都用到 window下的com元件,多執行緒的訊號量,讀寫鎖,思想都一樣。一般情況下 後面會討論例外情況 alloc 物件分配後引用計數為1 retain 物...