OC 記憶體分配

2021-07-23 22:34:40 字數 1605 閱讀 3891

記憶體分配與初始化:

記憶體分配與初始化是分開的

foo * foo=[[foo alloc]init];  //  記憶體開闢

初始化(建構函式):

1️⃣名字以init開頭

2️⃣返回乙個物件(函式鏈)

3️⃣先執行父類的初始化方法(先初始化繼承自父類的成員)

4️⃣需要檢查父類初始化的返回值

5️⃣正確處理初始化中的錯誤(引數的判斷)

id  //  任意型別的物件

-(instancetype)initwtihpoint:(circle123*)_orgin andradious:(int)_radious

if (_orgin==nil)

// case2:父類初始化時,對父類初始化的檢測

if (!(self=[super init]))

// case3:父類初始化之後,對當前類特有的例項變數初始化(記憶體分配)

if (orgin)

orgin=[[circle123 alloc]init];

if (!orgin)

[orgin setx:_orgin.x];

[orgin sety:_orgin.y];

radious=_radious;

return self;

}dealloc方法(析構函式):

注意:需要在方法中呼叫父類的dealloc方法

-(void)dealloc

p1=nil;

[super dealloc];

nslog(@"dealloc called!");

}點語法

1、當屬性中的retain換為assign時,c1.p=p1,會造成淺拷貝(c1.p與p1指向同乙個位址),當p1 release 之後,c1.p為野指標

2、當屬性中的retain換為copy時,c1.p=p1,會造成深拷貝(c1.p與p1指向不同的位址),各自的引用計數分別為1,所以程式沒有任何問題。

init中p=[[point alloc]init]主函式中 c1.p=[p1 copy];

1、assign  在主函式中copy過了,建立的不同的位址,記憶體洩漏

2、retain    在主函式中copy過了,建立的不同的位址,屬性用retain,釋放原來的空間引用計數+1,在呼叫析構函式的時候,記憶體洩漏

3、copy      記憶體洩漏

init函式中 p=_p,主函式中 c1.p=p1;

1、assign  野指標,多次刪除

2、retain   當建立c1物件的時候,c1.p指向p1,c1.p=p1,指向同一塊空間,多次刪除

3、copy      拷貝剛剛刪除的空間,造成程式錯誤

init函式中 p=_p,主函式中 c1.p=[p1 copy];

1、assign  野指標,多次刪除

2、retain   p1多次刪除,2️⃣pc記憶體洩漏

3、copy     記憶體洩漏(pc)

2️⃣2次刪除p1

記憶體分配 Go記憶體管理 記憶體分配一

go作為乙個比較新晚 新 的語言,自然借鑑前輩們的優點,比如說語言本身負責記憶體管理 對協程和高併發的高優支援 簡單高效的語法等。本篇及後續的幾篇要講的就是還沒提到的比較複雜的記憶體管理。學習記憶體管理 分配 前,如果有jvm的記憶體管理的基礎,會變得非常簡單,如果是第一次接觸記憶體管理,在看完go...

OC記憶體必讀

這裡只說超頻好的,還算容易買到的記憶體吧。且只說要上1g記憶體的。首先說明,超頻要關係到很多方面,這裡只是給大家做乙個借鑑,購買的時候運氣也是很大乙個因素,請大家了解。價錢易接受的普條我以 普 標註,價錢較高的廠商超頻版記憶體我以 超 標註。先來說一下激發電壓,是指記憶體電壓在達到此電壓時會有乙個明...

Oc 記憶體管理

1 對你自己擁有的物件負責,你只能釋放你擁有的物件 2 凡是你通過 retain alloc copy等手段獲得了所有者的物件,都必須在你不使用的時候來呼叫release autorelease等手段來釋放對他的所有權 3 在一定的 段內,對同乙個物件所作的copy alloc retain的操作次...