这是上一个问题的后续问题,希望更清楚一点。我只是好奇下面提供的代码是如何工作的,特别是变量myString被发布。它看起来不像是从输出?保留计数并复制二传手?
CODE
// IMPLEMENT
@implementation CelestialBody
- (void)setName:(NSString *)newName{
if(name != newName) {
[name release];
name = [newName copy];
}
}
- (void)dealloc{
[name release];
name = nil;
[super dealloc];
}
@end
。
// ------------------------------------------------------------------- **
// MAIN: 30th September 2009
// ------------------------------------------------------------------- **
#import <Foundation/Foundation.h>
#import "CelestialBody.h"
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
CelestialBody *newPlanet = [[CelestialBody alloc] init];
NSString *myString = [[NSString alloc]initWithFormat:@"go home"];
NSLog(@"RetainCount_1: %d",[myString retainCount]);
[newPlanet setName: myString];
NSLog(@"RetainCount_2: Incremented by copy in setName");
// Clean up
NSLog(@"RetainCount_2: %d -Before Release",[myString retainCount]);
[newPlanet release];
[myString release];
[pool drain];
NSLog(@"RetainCount_1: %d -After Release",[myString retainCount]);
return 0;
}
// ------------------------------------------------------------------- **
输出
Running…
2009-10-01 09:28:50.395 RetainCount_1: 1
2009-10-01 09:28:50.399 RetainCount_2: Incremented by copy in setName
2009-10-01 09:28:50.399 RetainCount_2: 2 -Before Release
2009-10-01 09:28:50.400 RetainCount_1: 1 -After Release
Debugger stopped.
我目前重新读Memeory管理指南试试,看看我已经错过了。
千恩万谢
编辑
只是增加了一个释放的dealloc的,看起来这是我失踪了。
- (void)dealloc{
[name release];
name = nil;
[super dealloc];
}
加里
不用担心-retainCount。别叫它。不要打印它。不要考虑它。这没有用。保持计数应被视为增量;你增加和减少,但潜在价值不是你关心的。 – bbum 2009-10-01 15:52:43