記憶體管理原則(配對原則):
只要出現了 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中的物件儲存在堆中 記憶體管理不當會造成的兩個問題 記憶體洩露,不再需要的物件沒有釋放,導致記憶體洩露,記憶體...