標籤:藍懿教育 劉國斌 ios objective-c
一、記憶體管理筆記
1、OC記憶體管理,管理堆棧記憶體,主要管理對象是堆記憶體。
2、記憶體計數:有指向它的,它的計數則加一。或者說有人引用它,計數加一。
3、沒有人引用之後,記憶體計數為0.對象被銷毀。記憶體被釋放。
ARC 編譯器自動加release 自動記憶體管理 對局部變數出括弧,自動減1.
mrc 手動記憶體管理。
[a1 release] 釋放一個,記憶體計數減一。
二、所有對象引用計數為0時,要釋放記憶體的時候,都將調用:方法 dealloc。
上課以打飛機,為記憶體管理執行個體。講解了當敵機被打死的時候,應該釋放記憶體。檢查所有對敵機對象有引用的位置,當所有地方都正確的釋放,那麼,Hero打死敵機,就會進入dealloc方法,此時可以在dealloc方法中輸出一下,若做到了正確的記憶體管理,記憶體沒有泄露,則將有“敵機死了”輸出。
ARC的原則是:誰加,誰負責減。
記憶體計數加一的情況
:
1、alloc命令會導致記憶體計數加一。
則是:誰加,誰負責減。
2、
eg:
[[self.view addSubView:]]添加到介面 記憶體計數會增加 不確定個。
[[self.view addSubView:]] +1
[e removeFromSuperView]; -1
3、
加到數組
從數組減。
4、
timer 為確保針對對象的方法調用成功
也要對 對象進行引用。
三、屬性括弧中的關鍵字,用來控制Set、Get方法中得內容。
retain(strong) :讓Set方法做兩件事①把原來的值 release 即-1②把新傳遞進來的值 retain 即+1;
e.g.: self.enemy 為什麼 self.enemy =[ [NSMutablearray alloc]init] ;需要加一
alloc +1
self.enemy Set方法+1
assign(weak) 讓Set 方法做一件事
把傳遞進來的值 賦值給全域變數,和記憶體計數無關。基礎資料型別 (Elementary Data Type)用 assign。預設為assign。
物件類型,為什麼要使用Strong。Strong關鍵字為什麼要把原來的值減一
eg.:若兩次賦值
出現的情況650) this.width=650;" src="http://img.blog.csdn.net/20150905225038851" alt="物件類型Strong關鍵字作用" title="" style="border:none;" />
650) this.width=650;" src="http://img.blog.csdn.net/20150905225117036" alt="這裡寫圖片描述" title="" style="border:none;" />
self.enemy =[ [nsmutablearray alloc]init];+2
self.enemy =[ [nsmutablearray alloc]init];
release(strong)
self.a = [[UIlable alloc]init];+2
自動記憶體管理會 -1.用到的同一個變數.如果是retain(strong),會再減一。
self.a = [[uilable alloc]init];
*例子:
一個人一次只能放一個風箏。
在放 新的風箏時 必須把老風箏收回來。再放新的。
如果不收回來。就放新風箏,那麼老風箏就像一下放走讓它走了,去汙染環境了。*
本文出自 “Get” 部落格,請務必保留此出處http://3517465.blog.51cto.com/3507465/1691659
藍懿教育 Objective-C 記憶體管理