Perché gli strumenti hanno segnalato una perdita, mentre il suo conteggio ref è diventato pari a zero
-
11-10-2019 - |
Domanda
mano Green I am. Sto utilizzando gli strumenti, e così è stato un grande aiuto per me finora, ma sono confuso ora perche' segnalare una perdita di memoria a me, mentre la sua storia blocco trapelato mi mostra che il conteggio ref di quella memoria erano finalmente diventati 0 . che cosa significa?
E 'davvero imbarazzante che non ho potuto postare un'immagine qui ... quindi devo descrivere in testo. La speranza sarebbe abbastanza chiaro per voi:
Tipo di evento || RefCt || Biblioteca Responsabile || Responsabile
Caller
malloc ||
1 ||
MyWeather || + [ForecastData parseSingleForecastWithXMLElement:]
autorelease ||
||
MyWeather ||
+ [ForecastData parseSingleForecastWithXMLElement:]
conservare ||
2 ||
MyWeather ||
+ [ForecastData parseWithData:]
rilasciare ||
1 ||
Fondazione ||
+ [Scarico NSAutoreleasePool:]
conservare ||
2 ||
Fondazione ||
+ [NSThread initWithTarget: selettore: oggetto:]
rilasciare ||
1 ||
Fondazione ||
+ [NSString confrontare: opzioni:]
rilasciare ||
0 ||
MyWeather ||
+ [RootViewController dealloc]
Ogni aiuto sarà apprezzato ~
Soluzione
E 'stato causato dalla mancanza di [super dealloc] in dealloc di forecastData, in modo che parte della memoria del forecastData non viene mai liberato, mentre il conteggio di conservare forecastData ha sono diventati zero. Comunque, grazie ragazzi.
Altri suggerimenti
non sta fornendo il codice di esempio tanto potrebbe essere qualsiasi cosa. La RefCount di MyWeather è pari a zero, ma Foundation è ancora uno, quindi forse si è ovunque assegnato un NSSting un mai rilasciato?
btw. Non avrei mai alloc-init una stringa, invece l'impostazione del testo direttamente e lasciare che la gestione della memoria faccia il resto. Non so perché, ma penso che sia un po 'buggy. A volte ricevo strani errori se provo qualcosa di simile:
NSString *str = [[NSString alloc] initWithString:@"some Text"];
myLabel.text = str;
[str release];
myLabel
dovrebbe mantenere, ma non è così. Mi metterò un errore se provo a release
esso. (E una perdita in caso contrario)
Se io uso
NSString *str = @"some Text";
myLabel.text = str;
funziona benissimo, nessun errore e nessuna perdita.
Hai provato questo sul dispositivo? A volte si può vedere perdite rivelano che non sono realmente le perdite.
L'altro motivo avrebbe potuto essere che hai avuto NSZombie abilitato, il che significa che gli oggetti in realtà non vengono rilasciati.