Je construis une petite application iphone et utilise un singleton pour stocker et mettre à jour une chaîne qui est mise à jour lorsque l'utilisateur tape des lettres ou des chiffres sur l'écran pour former un code.Objectif C NSString étant publié dans singleton
dire qu'ils 3 puis appuyez sur S puis 4 et je dois suivre et combiner cette entrée pour me donner « 3S4 » dire. Lorsque le singleton est initialisé, il crée un NSString vide et j'utilise ensuite la méthode stringByAppendString pour l'ajouter à la prochaine lettre/numéro tapé. Quand je l'ai essayé pour la première fois, je n'avais pas la ligne [enterCode retain] et l'application plantait avec EXC_BAD_ACCESS, toujours après 2 entrées. J'ai mis la propriété NSZombie qui m'a dit que le code entré a été désaffecté mais je ne sais pas où et comment cela s'est passé. Tout ce que je sais, c'est qu'à la fin de la méthode addInput, le retainCount sera dit 2 puis directement après que je puisse voir (en appelant le singleton d'ailleurs) il descendra à 1 (quand la ligne de retenue est là).
Ma question est: si ce que je l'ai fait en ajoutant [enteredCode retain] travaille pour moi, je suis en train de battre des règles ici ou d'aller à ce sujet dans le mauvais sens/mauvais? Je ne peux juste pas voir pourquoi la chaîne est libérée.
Je suis nouveau à Objective-C BTW
dans MySingleton.h
@interface MySingleton : NSObject {
NSString *enteredCode;
}
dans MySingleton.m
-(void) addInput:(NSString *) input
{
NSLog(@"enteredCode retain count is : %d \n ",[enteredCode retainCount]);
enteredCode = [enteredCode stringByAppendingString:input];
NSLog(@"enteredCode retain count is : %d \n ",[enteredCode retainCount]);
[enteredCode retain]; // without this the app crashes
NSLog(@"enteredCode retain count is : %d \n ",[enteredCode retainCount]);
}
-(id) init
{
self = [super init];
if (self)
{
enteredCode = @"";
}
return self;
}
Un grand merci pour avoir éclairci ce point. Merci pour la réponse de tout le monde aussi. J'ai modifié le code maintenant pour définir enterCode comme @property. – Cerv