Bonjour à tous, je suis encore jeune dans le développement de l'iPhone, mais j'ai une grande expérience avec d'autres langages de programmation. La chose qui me fait arracher les cheveux est la gestion memmory Obj-C et relâcher/retenir correctement. Je connais le concept, je sais "une fois que je comprend que ce sera facile" mais je ne suis pas encore tout à fait là, et ça me rend fou. Ici j'ai un simple morceau de code avec la classe et la méthode, qui ajoute simplement un caractère à la chaîne existante qui est synthétisée ainsi utilisée comme classe proprety ... la classe par exemple s'appelle myClass ...libérer et conserver NSString * correctement
myClas.h
@interface myClass : NSObject {
@private
NSString* someCommonString;
}
@propery (retain, nonatomic) NSString* someCommonString;
myClass.m
...
@synthesize someCommonString;
- (id) init
{
self = [super init];
if(self)
{
someCommonString = [[NSString alloc] initWith String:@"one "];
}
}
- (NSString*) appendString:(NSString*) stringToAdd
{
NSString* result = [someCommonString stringByAppendingString: stringToAdd];
return result;
}
- (void) doTheJob
{
NSString* test1 = @"two ";
NSString* test2 = [[NSString alloc] initWithString: @"three "];
NSString* test3 = [NSString stringWithFormat:@"four "];
self.someCommonString = [self appendString:test1];
self.someCommonString = [self appendString:test2];
self.someCommonString = [self appendString:test3];
NSLog(@"%@", someCommonString);
}
- (void) dealloc
{
[someCommonString release];
[super release];
}
...
Ok, après que j'alloc myClass et exécuter la méthode doTheJob, je devrais avoir @ "un deux trois quatre" dans le proprety de classe someCommonString. Je sais que ça marche, mais ça fuit aussi. test1, test2 et test3 sont 3 façons d'initialiser NSString, et seulement test2 devrait être libéré, c'est assez explicite, mais beaucoup plus inquiet de ce qui se passe en les passant comme arguments à la méthode appendString. Parce que je sais que j'ai une fuite, mais je ne sais pas comment gérer l'argument 1. stringToAdd [devrais-je m'inquiéter à ce sujet dans la méthode appendString du tout?] 2. le résultat -> si j'autelease le résultat, je ne sais pas savoir à quel moment le résultat sera désaffecté. 3. sommeCommonString dans appendStringMethod, dois-je le conserver, le libérer ou le laisser seul?
Huh :)
Merci beaucoup! Bien que cette stringByAppendingString n'ait pas été libérée – cybercow