@interface ClassA: NSObject
{
NSString *str;
}
-(void) setStr: (NSString *) s;
-(NSString *) str;
@end
@implementation ClassA
-(void) setStr: (NSString *) s
{
str = s;
}
-(NSString *) str
{
return str;
}
@end
int main (int argc, char *argv[])
{
NSAutorelea ePool * pool = [[NSAutoreleasePool alloc] init];
NSMutableString *myStr = [NSMutableSt ing stringWithString: @ ” A string ” ];
ClassA *myA = [[ClassA alloc] init];
NSLog (@ ” myStr retain count: %x ” , [myStr retainCount]); // default is 1
[myA setStr: myStr];
NSLog (@ ” myStr retain count: %x ” , [myStr retainCount] ; //setStr is point to point, so is 1
[myA release];
[pool drain];
return 0;
}
myStr retain count: 1
myStr retain count: 1
Another example
@interface ClassA: NSObject
{
NSString *str;
}
-(void) setStr: (NSString *) s;
-(NSString *) str;
@end
@implementation ClassA
-(void) setStr: (NSString *) s
{
str = s;
[str retain]; // counter + 1
}
-(NSString *) str
{
return str;
}
@end
int main (int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *myStr = [NSMutableString stringWithString: @ ” A string ” ];
ClassA *myA = [[ClassA alloc] init];
NSLog (@ ” myStr retain count: %x ” , [myStr retainCount]); //default is 1
[myA setStr: myStr];
NSLog (@ ” myStr retain count: %x ” , [myStr retainCount]); // setStr use retain, so counter +1
[myStr release]; //
NSLog (@ ” myStr retain count: %x ” , [myStr retainCount]);// release, so counter -1
[myA release];
[pool drain];
return 0;
}
myStr retain count: 1
myStr retain count: 2
myStr retain count: 1
沒有留言:
張貼留言