2011年5月15日 星期日

Fundation Framework-記憶體管理 CH17-3 Intro Ref. Counting

//

// main.m

// CH17-3 Intro Ref counting

//

// Created by jason on 2011/5/15.

// Copyright 2011 __MyCompanyName__. All rights reserved.

//


//#import


#import

#import

#import


//簡單設計 ClassA 物件 ,自行設計 setter getter

@interface ClassA : NSObject

{

NSString *str;

}


-(void) setStr: (NSString *) s;

-(NSString *) str;

@end


@implementation ClassA

-(void) setStr: (NSString *) s //Setter

{

str = s;

}


-(NSString *) str // Getter

{

return str;

}

@end


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

{

NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];

NSMutableString *myStr=[NSMutableString stringWithString:@"A string"];

ClassA *myA=[[ClassA alloc] init];

NSLog(@"myStr retain count: %x", [myStr retainCount]); // Ref. Count = 1

[myA setStr: myStr]; // myA (ClassA) 呼叫 myStr

NSLog(@"myStr retain count:%x", [myStr retainCount]); // 再被 myA呼叫前後皆為 Ref. Count =1

// 問題出在 myStr若這時被Release 這樣一來 myA內的 str實體變數就不合法了! 因為 myStr Ref. Count 已經為 0! 它的空間將被釋放

[myA release];

[pool drain];

return 0;

//return NSApplicationMain(argc, (const char **) argv);

}

沒有留言: