Può fissare a zero, ma non una cosa diversa
-
26-10-2019 - |
Domanda
penso che non finisco di capire tutto di memoria e quella roba, ma questo è il mio problema:
Ho una variabile definita idActual su una visualizzazione che verrà spinto (var definito nella sua intestazione), posso leggere (NSLog (idActual)) e impostato a zero senza problemi. Ma quando ho cambiare il suo valore ottengo un errore CFString, che il suo doveva essere a causa di gestione della memoria male, ho provato questo:
Posso fare questo: nextView.idActual = nil;
non posso fare questo:
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, c sempre mi danno l'errore CFString: *** - [CFString isEqualToString:]: messaggio inviato ad esempio deallocato
Soluzione
Sembra che il CFString (NSString) che è contenuta in nextView.idActual
è già stato rilasciato quando si va a modificare il valore. Se è possibile inviare più del relativo codice, che avrebbe aiutato.
Sto indovinando che idActual
è dichiarato come @property(nonatomic,retain)
. Quando si tenta di impostare un nuovo valore nel idActual
, il metodo setter per la proprietà si chiama (E 'possibile che il setter è stata generata automaticamente). La prima cosa che il metodo setter sta facendo sta cercando di confrontare il valore vecchio e il nuovo valore -. E poi si blocca
Quando quel metodo setter tentativi di confrontare il nuovo valore per il vecchio valore, si corre nei guai perché il vecchio valore è già deallocata.
sta chiamando [nextView.idActual release]
prima di assegnare questi nuovi valori? Se siete, commentare quella linea, e vedere se questo risolve il problema. Il metodo setter auto-generata rilascerà il vecchio valore per voi.