Ceci est une question de suivi d'une question précédente, qui, espérons-le, est un peu plus claire. Je suis juste curieux de voir comment fonctionne le code présenté ci-dessous, en particulier la variable myString qui sortira. Cela ne semble pas provenir de la sortie?Conserver le compte et copier dans Setter?
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;
}
// ------------------------------------------------------------------- **
SORTIE
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.
Je relis actuellement le Guide de gestion Memeory pour essayer de voir ce que je l'ai manqué.
merci beaucoup
EDIT
ajouté un la sortie du dealloc, il semble que c'était ce que je manque.
- (void)dealloc{
[name release];
name = nil;
[super dealloc];
}
gary
Ne vous inquiétez pas pour -retainCount. Ne l'appelle pas. Ne l'imprime pas. Ne le considère pas. Ce n'est pas utile. Les comptes retenus doivent être considérés comme des deltas; vous augmentez et décrémentez, mais la valeur sous-jacente n'est pas votre préoccupation. – bbum