Tu dici:
linea l'emissione non è in realtà rilascio oggetti nel dizionario. Posso ancora vederli tutti sulla riga successiva . Solo quando viene eseguita la riga di allocazione il dizionario viene azzerato. C'è un modo migliore per farlo?
Se -release
del dizionario mutevole provoca il dizionario viene deallocato - gocce il conteggio conservano a zero - allora il dizionario mutevole rilascerà tutti gli oggetti contenuti. Sempre.
Così, se gli oggetti non vengono rilasciate, allora questo ha suggerito "correzione" ...
[myDictionary removeAllObjects];
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];
... è una perdita di memoria in quanto l'istanza originale di NSMutableDictionary sarà trapelato.
Di conseguenza, chiamando -removeAllObjects
sarà vuota il dizionario e rilasciare tutti gli oggetti contenuti, ma avete ancora una perdita di memoria che si dovrebbe capire e risolvere.
Per essere franchi:
Se gli oggetti nel vostro dizionario non vengono deallocate quando il dizionario riceve il sopra -release
(senza chiamare -removeAllObjects
), poi c'è una perdita di memoria. Si tratta di uno:
Gli oggetti nel dizionario sono state mantenute un tempo supplementare.
C'è ancora uno straordinario -retain
sul dizionario.
Dal momento che si dice gli oggetti sono in corso in modo corretto (come in, come previsto) deallocato quando si chiama -removeAllObjects
, allora deve essere (2). Guarda il tuo codice e scopri dove c'è un altro -retain
del dizionario. È possibile utilizzare lo strumento Oggetto Alloc per capire esattamente da dove provengono tutti i retain.
Hai ragione. Per qualche ragione, non è apparso nel suggerimento sul codice quando ho provato inizialmente ... quindi ho pensato che non fosse disponibile. Ora lo vedo. Grazie. – 4thSpace
Questo non risponde alla domanda. '-release' sul dizionario rilascerà tutti gli oggetti contenuti. 4thSpace ha un problema diverso. – bbum
Voglio solo dire che se rilasci un NSDictionary e gli oggetti non vengono rilasciati, significa che quegli oggetti hanno un retainCount di più di uno, il che significa che vengono sovrascritti o non vengono rilasciati correttamente altrove. Quando aggiungi gli oggetti al dizionario, li stai rilasciando (o li autorizzi automaticamente) correttamente? – lucius