iOS之手動記憶體管理

2021-07-10 06:55:32 字數 2188 閱讀 8613

記憶體管理是每個程式設計師必須要掌握的技能, 也是寫好乙個程式,寫乙個好程式的必備技能. 下面談一下我對ios開發中的記憶體管理的理解. 

如果你是乙個比較新的ios程式設計師, 那麼恭喜你, 你已經很輕鬆了, 因為在現在的開發中已經很少去手動管理記憶體了, 那麼問題來了, 既然不需要去手動管理了那學他還有什麼用呢? 當然有用, 因為之後你學了之後才會真正了解乙個物件的建立和消失過程.  而且對於比較老的第三方框架來說很多還是用的手動記憶體管理, 所以學好手動記憶體管理也是讀懂第三方框架的基礎.  對於有些較老的專案, 通常也是採用的手動記憶體管理, 如果想去維護也必須要學會手動記憶體管理. 

對於初學者,  聽到記憶體管理就會有一種畏懼感, 其實對於oc來說很多底層的實現官方已經幫我們封裝好了, 所以我們要做的管理只有兩件事情, 第一就是記憶體洩露,  第二就是野指標.  簡單的說記憶體洩露就是指向物件的指標已經沒了, 但是這個物件依然在記憶體裡存在, 無法釋放, 當這樣的物件達到一定程度, 就會引起記憶體洩漏.  當物件釋放了, 而指向物件的指標中依然存著指向物件的位址, 再次對這個指標操作時,就會出問題,  這也是常說的殭屍物件.   

記憶體管理遵循以下原則. 

只要出現了

new,alloc,retain,引用計數retaincount就會加1, 因此

就一定配對出現乙個

release, 原則就是在**建立就在**release , 這樣就不容易出現遺漏. 對於多個物件相互引用的情況直接用**說明吧.

//  main.m

// 

手動記憶體管理

#import

#import

"person.h"

intmain(

intargc,

const

char

* argv)

return0;

}//  car.h

// 

手動記憶體管理

#import

@inte***ce

car :

nsobject

@property

intspeed;

- (void

)run;

@end

//  car.m

// 

手動記憶體管理

#import

"car.h"

@implementation

car

- (void

)dealloc

- (void

)run

@end

//  person.h

// 

手動記憶體管理

#import

#import

"car.h"

@inte***ce

person :

nsobject

- (void

)setname:(

nsstring

*)name;

- (nsstring

*)name;

- (void

)setcar:(

car*)car;

- (car*)car;

- (void

)drive;

@end

//  person.m

// 

手動記憶體管理

#import

"person.h" //

配對原則

:new alloc retain

對應乙個

release,autorelease

@implementation

person

- (void

)setname:(

nsstring

*)name

} - (nsstring

*)name

- (void

)setcar:(

car*)car

} - (car

*)car

- (void

)drive

- (void

)dealloc

@end

因為在person中存在乙個car物件, 所以在person銷毀時需要對car物件進行銷毀, 所以在 person類的dealloc方法中要對car進行release操作, 這樣才能保證所有物件都被正確釋放.

ios之手動記憶體管理

在建立物件的時候,回生成retaincount變數,alloc,new,retain都會使這個值 1,對應的release方法則會使這個值 1。當retaincount 0時系統會呼叫dealloc方法使系統銷毀改物件。所以我們在使用手動記憶體管理時,要注意一下問題 1.原則 記憶體管理原則 配對原...

iOS之手動記憶體管理

objective c採用了一種被稱為引用計數 reference counting 的機制來追蹤物件狀態,每個物件都有乙個與之關聯的整數,被稱為引用計數器。當乙個物件的引用計數為0時,表明程式不再需要該物件,物件會被銷毀。若是物件還持有其他物件的引用,必須重寫dealloc方法,在方法中釋放該物件...

記憶體洩露之手動記憶體管理 MRC

由於移動裝置的記憶體是有限的,如果建立的物件用完不及時的銷毀 釋放 的話,就會造成記憶體洩露.如果該物件的記憶體空間釋放了,但是依舊在使用的話,那麼就是殭屍物件.同時指向殭屍物件的指標就是野指標.對於記憶體管理的原則是,不用的物件就要 其所占用的空間,防止造成記憶體洩露.並且我們要知道,記憶體洩露主...