Objective-C學習_記憶體管理學習筆記,objectivec記憶體管理

來源:互聯網
上載者:User

Objective-C學習_記憶體管理學習筆記,objectivec記憶體管理

 

記憶體流失 : 應當廢棄的對象在超出生命週期後繼續存在

記憶體管理 : 遵守配對原則,有alloc/new/copy/mutableCopy就要有相對應的release或autorelease

原因 : Oc對象是在堆裡面的(動態分配),堆裡面的記憶體由我們程式員來管理 ;

 

對象操作

Objective –c 對應方法

產生並持有對象

alloc/new/copy/mutableCopy等

持有對象

retain 方法

釋放對象

release方法

廢棄對象

dealloc方法(系統自動調)

   記憶體管理的思考方式 (文中“自己”表示 : “對象的使用環境”或“開發人員”):

 

  1.自己產生的對象,自己持有

  2.非自己產生的對象,自己也能持有

  3.不再需要自己持有的對象時釋放

  4.非自己持有的對象無法釋放

 

總結 :

1.調用alloc或是retain方法之後,引用計數值 + 1

2.調用release方法之後,引用計數值 - 1

3.當引用計數值為0時,調用dealloc方法廢棄對象

4.調用retianCount,可以返回引用計數器的個數

 

多個物件記憶體管理步驟:(使用@property就會產生下面的set方法)

1.在set方法中調用傳進來的參數 retain方法

   -(void)setRoom(Room*)room

  {

           if(_room != room){//判斷傳進來的對象是否是當前的對象

                  [_room relase];//釋放掉當前的對象

    _room = [room retain];//引用新的對象,賦值

  }

2.在dealloc方法中調用release

-(void)dealloc 

{

  [_room release];  

  _room = nil;

  [super dealloc];

}

 

autorelease 使用方法:

 

#import和@class的使用 :

#import  :包含所有的資訊,包含引用類的變數和方法

@class      : 可以簡單地引用一個類(僅僅告訴編譯器,這個是一個類)

@class和#import的主要區別 : #import的內容改變了就要拷貝一次。

如何使用 :

(1)在.H檔案中使用@class

(2)在.M檔案中是用得是#import,真正使用的時候才要#import

(3)A.h裡#import “B”,B.h裡#import “A”,導致錯誤 (Unknown type name……)

 

解決相互引用(retain): 一端用retain,一端用assign

 

常見知識點或注意點: 

(1)剛建立一個對象的計數器就為1

(2)重寫deallloc方法的時候 : [super dealloc]必須放在最後面

(3)如果釋放了對象,把所指向的地址賦值為nil,可以防止野指標操作

(4)給null 指標發送訊息是不會出錯的,沒有什麼現象

(5)調用retain方法會返回對象本身

(6)指標賦值並沒有調用retain,需要手動調用retain

(7)@property 產生set方法已經實現了上面的set方法和get方法,assign是預設的寫法

(8)取得一個非自己產生並自己持有的對象 : id obj=[NSMutableArray array];  持有對象 : [obj retain];(類方法裡面自動調了autorelease)

(9)如果使用非自己持有的對象,這個程式會崩潰。

(10)__weak (只能用於ios5以上):可以避免循環參考,__修飾的變數不持有對象

(11)佔用記憶體較大的不要放在autoreleasepool,效能問題

(12)重寫alloc 方法的時候一定要使用self,這樣子類也可以建立相對應的對象

(13)instancetype,比id更加智能,可以在編譯的時候就可以發現問題

(14)如果直接使用   __weak UIView * view = [[UIView alloc]init];會發出警告 : Assigning retained object to weak variable……

(15)弱應用優點 : 在持有某對象的弱引用的時,若該對象被廢棄,則弱引用將會自動失效且處於nil(被賦值的狀態)相對於__unsafe_unretained更安全

(16)非OC對象是放在棧中,指標變數(4個位元組)存在棧中

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.