//alloc 開闢記憶體空間,並且將物件的引用計數由0變1.
person *per1 = [[person
alloc] init]; //0 - 1
//retaincount 用來獲取當前物件的引用計數
nslog(@"%lu", [per1 retaincount]);
//retain 將物件的引用計數加一
person *per2 = [per1 retain]; //1 - 2
nslog(@"%lu", [per2 retaincount]);
[per2 retain]; //2 - 3
[per1 retain]; //3 - 4
nslog(@"%lu", [per1 retaincount]);
nslog(@"%lu", [per2 retaincount]);
//release 將物件的引用計數(立即)- 1
[per2 release]; //4 - 3
nslog(@"%lu", [per2 retaincount]);
[per2 release]; //3 - 2
nslog(@"%lu", [per2 retaincount]);
[per2 release]; //2 - 1
nslog(@"%lu", [per2 retaincount]);
[per2 release]; //1 - 0
//過度釋放
//現象:當寫完和記憶體引用計數- 1有關的操作後,程式立即crash
//原因:空間被系統**後,不能再做和引用計數-1有關的操作,否則立即crash,
//解決方案:刪除
// [per2 release];
//當引用計數為0時, 系統會自動**記憶體, 我們只管理引用計數
per2 = nil;
per1 = nil;
nslog(@"%lu", [per2 retaincount]); //
野指標異常
//現象:可能會崩潰,也可能不會崩潰,寫到某一行**時突然崩潰,(沒有寫任何引用計數相關的**)
//產生原因:該物件的空間已經被系統**,不能訪問沒有所有權的物件
//解決方案:空間被系統收回後.禁止訪問
//錯誤例項:解決方案:per2 = nil; per1 = nil;
nslog(@"%lu", [per2 retaincount]);
nslog(@"%lu", [per2 retaincount]);
nslog(@"%lu", [per2 retaincount]);
nslog(@"%lu", [per2 retaincount]);
nslog(@"%lu", [per2 retaincount]); }
//記憶體管理基本原則:
//如果你對乙個物件alloc, retain, copy 之後,你就擁有了該物件的所有權,你就必須把它進行release 或者 autorelease.
//*****===原始*****=== /*
nsautoreleasepool *pool = [[nsautoreleasepool alloc] init];
person *per = [[person alloc] init];//0 - 1
nslog(@"%lu", [per retaincount]);
//autorelease會將宣告為autorelease的物件放入離他最近的自動釋放池中,當釋放池銷毀時,會向池中每乙個物件傳送乙個release訊息
[per autorelease];
nslog(@"%lu", [per retaincount]);
[pool release]; */
//**********更改*****==
@autoreleasepool
nslog(@"test"); }
//面試題一
@autoreleasepool }
}//面試題二
//常量區記憶體系統管理
//記憶體洩漏
//涉及三個區(棧區堆區常量區)
@autoreleasepool
OC 記憶體管理初級
法則 如果對乙個物件進行了alloc retain copy之後,就擁有了該物件的所有權,就必須對它進行release或者autorelease alloc 引用計數0 1 retain 引用計數 立即 1 copy release 引用計數 立即 1 autorelease 配合 autorele...
oc的記憶體管理初級
建立乙個person類在.h,宣告屬性 凡是語義設定使用了retain copy的屬性,其對應的例項變數都需要在dealloc方法裡面release一次 property nonatomic copy nsstring hobby property nonatomic retain nsstring...
OC記憶體管理的初級理解
自己每開闢一次空間,自己要對其 自己開闢的 進行釋放 對引用計數 1,相應的也要對引用計數 1 不必管系統對空間的操作,系統會對其進行處理.1.能讓引用計數改變的五個方法 1 alloc開闢記憶體空間,將物件的引用計數 1 2 retain將物件的引用計數 1 3 copy 4 release將物件...