Domanda

Sto cercando di individuare le perdite utilizzando gli strumenti, ma le perdite che vedo sono simili a quelle nella prossima immagine:

  

perdite

Come puoi vedere non ci sono informazioni su quale riga di codice stia perdendo esattamente. Tutte le perdite che ho, circa 20, sono così, o in altre parole, le perdite non mostrano alcuna linea del mio codice in particolare.

La perdita in questa immagine è correlata a " _CFAllocatorSystem " (???) su CoreFoundation e ne ho altri che dicono semplicemente GSEvent. Non ho idea di cosa stia generando questi.

Come posso scoprirlo?

grazie per l'aiuto.

È stato utile?

Soluzione

Penso che tu voglia entrare negli strumenti dopo aver corso sotto perdita e selezionare " Vista sorgente " ;. Quindi è necessario trascinare i file sorgente nella finestra dello strumento. Mostrerà quindi le linee nel codice in cui si verifica la perdita insieme allo stack di chiamate.

Qualcuno lancia il mio codice perde una vista. Sembra così in Strumenti: alt text http://img688.imageshack.us/img688/9669/screenshot20091028at131png

Altri suggerimenti

La cosa che ti mostra Perdite è la traccia del codice che ha allocato l'oggetto che perde (il che significa che è conservato ma alla tua applicazione non sono rimaste variabili che abbiano quell'indirizzo). Ciò che non ti mostra è proprio dove l'oggetto avrebbe dovuto essere rilasciato per non causare la perdita, poiché è impossibile saperlo (è possibile trovare dove viene attualmente chiamato il rilascio, ma potrebbe non essere così utile).

Quindi ciò che questa traccia mi sta dicendo è che un po 'di memoria allocata dal sistema viene mantenuta da te, e quindi il riferimento dimenticato - una chiave è il "PurpleEvent". linea, che è comune in un thread che si occupa di eventi timer o forse di notifiche. È possibile che tu abbia ricevuto una notifica e ne abbia nascosto qualcosa, senza rilasciarlo in seguito.

Se sai a che punto si verifica la perdita, dovresti essere in grado di isolare quale codice è in esecuzione durante quel periodo.

Vedi qui e soprattutto questa citazione:

Questo elenco ti informa sui tipi, le dimensioni, gli indirizzi degli oggetti trapelati e persino le loro pile di chiamate.

Quindi puoi rintracciare la fonte dei ricordi trapelati attraverso le pile di chiamate.

La traccia dello stack mostra esattamente quale linea è il colpevole. Apparentemente la riga 14 in main.m nel tuo caso. Non sai di cosa ti sei confuso?

Il colpevole era l'accelerometro e sto compilando per OS 3.0.

In altre parole, l'accelerometro che Apple ha affermato che le sue perdite sono state corrette, continua a perdere come l'inferno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top