Objective-C學習筆記 記憶體管理

來源:互聯網
上載者:User

標籤:oc記憶體管理 對象所有權

    引用計數

每個對象都有一個與之相關聯多整數,被稱作它的引用計數器或保留計算機,當某段代碼需要訪問一個對象時,該代碼就將該對象的保留計數器值加1,表示我要訪問該對象,當這段代碼訪問結束的時候,將對象的保留計數器數值減1,表示不再訪問該對象了。當保留計數器的值為0時,表示不再有代碼訪問該對象了,此時它將被銷毀同時佔用的記憶體被回收。

對象的保留計數器值初始值為1。當一個對象即將要被銷毀的時候,OC會向對象發送一條dealloc訊息,這條訊息可以在自己的對象中重寫。

常見的幾種調用方法:

-(id) retain;

-(oneway void) release;

-(NSUInteger) retainCount;

Eg:

#import <Foundation/Foundation.h>


@interface RetainTra : NSObject


@end


@implementation RetainTra

-(id) init

{

    if (self = [super init]) {

        NSLog(@"init : This is first call -- %d .",[self retainCount]);

    }

    return (self);

}

-(void) dealloc

{

    NSLog(@"dealloc called . Bye Bye..");

    [super dealloc];

}

@end


int main(int argc, const char * argv[]) {

RetainTra *tracker = [ RetainTra new]; //count:1 此處直接調用了init

    

    [tracker retain];//count 2

    NSLog(@"%d--1",[tracker retainCount]);

    

    [tracker retain];//count 3

    NSLog(@"%d--2",[tracker retainCount]);

    

    [tracker release]; //count 2

    NSLog(@"%d--3",[tracker retainCount]);

    

    [tracker release]; //count 1

    NSLog(@"%d--4",[tracker retainCount]);

    

    [tracker release]; //count 0 調用了dealloc。。

    //NSLog(@"%d--5",[tracker retainCount]);

  

    return 0;


}


對象所有權

    如果一個對象內有指向其他對象的執行個體變數,則稱該對象擁有這些對象。如。car對象擁有其指向的engine和tire對象。同樣,如果一個函數建立了一個對象,則稱該函數擁有這個對象。

存取方法中的保留和釋放

    一個更好的解決對象釋放問題的代碼

-(void) setEngine :(Engine *) newEngine

{

[newEngine retain];

[engine release];

engine = newEngine;

}//setEngine

首先保留了新的engine對象,即使newEngine與engine是同一個對象,保留計數器的值也將先增加,然後立即減少。由於沒有歸0,engine對象意外的未被銷毀,這樣避免了錯誤發生。

在存取方法中,如果先保留新對象,然後再釋放對象就不會出現問題了。

自動釋放

    不知道為什麼,看到這個詞的時候,前面一直緊張的內心忽然平靜了下來。。。

今天在看引用計數和對象所有權上花了很多時間,加上老師講了很多關於函數的基礎概念,需要慢慢記憶的東西很多。


Objective-C學習筆記 記憶體管理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.