//
// 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);
}
沒有留言:
張貼留言