Question

Je pense que je ne finis pas comprendre tout au sujet de la mémoire et ce genre de choses, mais voici mon problème:

J'ai une variable définie idActual sur une vue qui sera poussée (var défini dans son en-tête), je peux lire (NSLog (idActual)) et le mettre à zéro sans problème. Mais quand je change sa valeur que je reçois une erreur de CFString, que son supposé être dû à une mauvaise gestion de la mémoire, j'ai essayé ceci:

Je peux le faire: nextView.idActual = nil;

je ne peux pas faire ceci:

a) nextView.idActual = @"1";

b) NSString *str = [NSString stringWithFormat:@"1"]; 
   nextView.idActual =  str;

c) NSString *str = [[NSString alloc] initWithFormat:@"1"];
   nextView.idActual = str;
   [str release];

a, b et c me donne toujours l'erreur de CFString: *** - [CFString isEqualToString:]: message envoyé à l'instance désallouées

Était-ce utile?

La solution

Il semble que le CFString (NSString) qui est contenu dans nextView.idActual a déjà été libéré quand vous allez changer la valeur. Si vous ne pouvez pas poster plus du code connexe, cela peut aider.

Je devine que idActual est déclarée comme @property(nonatomic,retain). Lorsque vous essayez de définir une nouvelle valeur dans idActual, la méthode setter pour cette propriété est appelée (Il est possible que le poseur a été généré automatiquement). La première chose que la méthode setter fait tente de comparer l'ancienne valeur et la nouvelle valeur -. Puis il se bloque

Lorsque cette méthode setter tente de comparer la nouvelle valeur à l'ancienne valeur, il est en difficulté parce que l'ancienne valeur est déjà libérée.

Demandez-vous [nextView.idActual release] avant d'attribuer ces nouvelles valeurs? Si vous êtes, commentez cette ligne, et voir si cela résout votre problème. La méthode setter généré automatiquement libérera l'ancienne valeur pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top