OC記憶體管理初級演練

2021-06-23 05:33:31 字數 2132 閱讀 7679

//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將物件...