記憶體分配與初始化:
記憶體分配與初始化是分開的
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的操作次...