Si j'ai une méthodeNSString * string = @ "someString" vs NSString * string = [[alloc NSString] initWithFormat @ "% @", string]
- (void) myMethod:(NSString *)string {
[Object anothermethodWithString:string];
}
et j'appelle
[Object myMethod:@"this is a string with no alloc statement"]
ai-je besoin de faire quelque chose comme
- (void) myMethod:(NSString *)string {
NSString *string2 = [[NSString alloc] initWithFormat:@"%@", string];
[Object anothermethodWithString:string2];
[string2 release];
}
au lieu de la façon dont je l'avais maméthode avant? J'ai un code qui se comporte mal et qui semble provenir d'une chaîne auto-libérée alors qu'une seconde méthode est appelée dans une autre méthode (comme dans l'exemple). La deuxième façon dont myMethod a résolu tous mes problèmes.
Donc, une chaîne "non-alloc" est-elle une chaîne auto-libérée? J'ai posé cette question comme une suite à une autre question (qui était complètement indépendante et c'est pourquoi je crée ce post), et quelques sources ont dit que je n'ai pas besoin de réaffecter la chaîne. Je suis confus, parce que le comportement de mon code me dit le contraire.
Avez-vous invoqué 'new',' alloc', 'retain', ou' copy' pour créer la chaîne? Sinon, vous n'êtes pas responsable de le libérer. Les chaînes constantes ('@" "') sont globales et permanentes. –
Non, je n'ai invoqué aucune de ces méthodes sur la chaîne transmise à myMethod. Ma chaîne @ "" permanente semble être écrasée. –