Frage

Ich glaube, ich fertig nicht damit, alles über Erinnerung und das Zeug zu verstehen, aber das ist mein Problem:

Ich habe eine variable idaktuelle variable auf einer Ansicht, die gedrückt wird (var in seinem Header definiert), kann ich lesen (nslog (idaktual)) und sie ohne Probleme auf NIL einstellen. Aber wenn ich seinen Wert ändere, erhalte ich einen CFString -Fehler, dass es auf schlechte Speicherverwaltung zurückzuführen ist, habe ich versucht:

Ich kann das tun: NextView.idactual = nil;

Ich kann das nicht machen:

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 und C geben mir immer den CFString -Fehler: *** -[cfstring isequalToString:]: Nachricht, die an die Deallocated -Instanz gesendet wurde

War es hilfreich?

Lösung

Es scheint, dass der CFString (NSString), der in enthalten ist nextView.idActual wurde bereits veröffentlicht, wenn Sie den Wert ändern. Wenn Sie mehr vom verwandten Code veröffentlichen können, würde dies helfen.

Ich vermute das idActual wird deklariert als @property(nonatomic,retain). Wenn Sie versuchen, einen neuen Wert in einen neuen Wert festzulegen idActual, Die Settermethode für diese Eigenschaft wird aufgerufen (es ist möglich, dass der Setter automatisch generiert wurde). Das erste, was die Setter -Methode tut, ist, den alten Wert und den neuen Wert zu vergleichen - und dann stürzt sie ab.

Wenn diese Setter -Methode versucht, den neuen Wert mit dem alten Wert zu vergleichen, wird sie in Schwierigkeiten geraten, da der alte Wert bereits ausgeführt wird.

Rufst du an [nextView.idActual release] Bevor Sie diese neuen Werte zuweisen? Wenn ja, kommentieren Sie diese Zeile und prüfen Sie, ob dies Ihr Problem behebt. Die automatisch generierte Setter-Methode veröffentlicht den alten Wert für Sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top