《ios 單個物件的記憶體管理》

2021-07-09 02:01:22 字數 1845 閱讀 4933

記憶體管理原則(配對原則):

只要出現了 new,alloc,retain,就一定配對出現乙個release,autorelease。

保證**中allo和release成對出現是保證記憶體管理的關鍵。

殭屍物件:被系統**的物件我們稱之為殭屍物件。

手動記憶體管理研究問題方法:

1、野指標操作:指標物件被釋放了之後(retaincount=0之後系統自動釋放),再使用這個物件指標會造成的崩潰效果。

#import 

@inte***ce

person : nsobject

@property

int age;

- (void)run;

@end

#import "person.h"

@implementation

person

- (void)dealloc

- (nsstring *)description

- (void)run

@end

person * p = [[person alloc] init];  // retaincount = 1

p.age = 20;

nslog(@"%@",p);

[p release]; // retaincount = 0 p將被系統自動釋放

nslog[@"%@",p] // 野指標

解決野指標的方法:如果確定當前作用於中的物件已經不會再被使用了,為了防止野指標操作,通常我們會把不在使用的指標變數賦值為nil,之後無論訪問什麼方法和屬性都不會造成野指標,因為呼叫nil的任何屬性和方法都是沒效果的。

person * p = [[person alloc] init];

p.age = 20;

nslog(@"%@",p);

[p release];

//如果你確定當前作用於中的物件已經不會再被使用了,為了防止野指標操作,通常我們會把不在使用的指標變數賦值為nil

p = nil;

p.age = 30;//[nil

setage:

30];

[p run]; //[nil run];

2、

**記憶體洩漏**:指的就是,不再被使用的物件,一直在記憶體中沒有被銷毀.會造成程式內存在執行過程中記憶體占用很大,就會造成記憶體警告,最後系統自動閃退。

//記憶體洩漏第一種情況

//1 person * p = [[person alloc] init];

p.age = 20;

nslog(@"%@",p);

//2[p retain];

//3[p retain];

//2[p release];

//記憶體洩漏第一種情況

person * p = [[person alloc] init];

p.age = 20;

[p run];

p = nil;

[p release];//[nil release];

person * p = [[person alloc] init];

p.age = 20;

person * p1 = p; // 兩個指標指向同乙個物件的記憶體空間

[p1 release]; // 記憶體被釋放 不能在呼叫

[p.age = 10]; // 野指標

[p1.age = 10] // 野指標

單個物件記憶體管理分析

手動記憶體管理,主要需要注意2個問題,乙個是空指標,另外乙個是記憶體洩露,在開發當中,該如何去避免這樣的問題.import import person.h void test 空指標型別 void test2 針對上面這種空指標情況的處理 void test3 記憶體洩漏 void test4 vo...

iOS的記憶體管理

今晚有空,總結一下學習ios記憶體管理的一些認識。文章中可能會涉及一些相對底層的知識,c的記憶體管理知識,慎入。前方高能!前方高能!前方高能!經典的記憶體劃分 棧 堆 bss段 資料段 段。如 下圖 先說堆疊 在c語言裡,可以簡單的說malloc等方法主動申請記憶體,其記憶體空間是在堆上,其他的在棧...

iOS的記憶體管理

通過字面的方式建立出來的物件儲存在常量區,通過物件方法和類方法建立出來的物件儲存在堆區 記憶體有系統管理,區域性變數儲存在棧,當變數離開其所在 快就會被 堆記憶體需要程式設計師自己管理,oc中的物件儲存在堆中 記憶體管理不當會造成的兩個問題 記憶體洩露,不再需要的物件沒有釋放,導致記憶體洩露,記憶體...