Domanda

La mia app si arresta in modo anomalo dopo circa 20 minuti con lo stato 101 (memoria esaurita, credo)

Il debug con Instruments - ObjectAlloc e Leaks non mi dà indizi. Il grafico ObjectAlloc rimane a un buon livello costante di circa 1 milione di byte (1 MB), così come il numero netto di allocazioni. Mi sono sbarazzato di tutte le perdite.

Ho pensato che potesse avere a che fare con il numero di thread, ma rappresentarli graficamente in ObjectAlloc mostra anche che sono costanti.

Qualcuno può indicarmi la direzione di un altro strumento o di un'altra strada di indagine?

È stato utile?

Soluzione

Risolvi tutto ciò che Clang trova. LLVM Clang Static Analysis

Altri suggerimenti

Ricorda che gli oggetti allocati dal sistema (e che includono cose come immagini e suoni) non vengono tracciati in Instruments (anche se i conteggi di livello superiore lo fanno ovviamente). Quindi è fattibile che stai caricando immagini, diciamo, che non contribuiranno molto al tuo utilizzo della memoria come mostra, ma possono drenare molta memoria effettiva!

Se nulla di tutto ciò colpisce alcun accordo, potresti provare l'approccio di debug sottrattivo - (prendi una copia del tuo progetto) ritaglia blocchi di funzionalità fino a quando il problema non scompare o ottieni la cosa più piccola possibile che lo riproduce. Questo dovrebbe almeno aiutarti a trovare dove si trova il collo di bottiglia. Certo, questo sarà difficile (a) perché dovrai aspettare circa 20 minuti ogni volta che esegui un test (ma se lo fai una procedura in background non è poi così male) e (b) perché la natura dei problemi di memoria è che lì potrebbe non essere una singola causa, ma una massa critica di cause minori.

Buona fortuna!

Le mie esperienze con Object Alloc non sono state così grandi. Non ti dà sempre la memoria effettiva utilizzata dalla tua applicazione.

Usa invece Allocazione oggetti con Activity Monitor. Assicurati di utilizzare " memoria fisica libera " e " memoria fisica utilizzata " opzioni nel monitor attività. Questo ti dirà esattamente quanta memoria sta usando la tua applicazione.

Che cosa intendi con "buon livello". Non si alza nel tempo, per niente? Quanta memoria totale - potrebbe essere solo il telefono ha bisogno di memoria per qualche altra app e la tua è un po 'troppo grande per rimanere in piedi.

Il codice di errore 101 indica che il sistema operativo iPhone ha forzato l'uscita dalla tua app. Se stai usando UIImageViews nella tua applicazione, assicurati di gestirne la memoria. Ho scoperto che una volta che la mia applicazione supera i 10/12 MB, l'iPhone la termina.

Se non stai utilizzando alcuna visualizzazione di immagini (o immagini di grandi dimensioni), il tuo codice back-end sta occupando troppo spazio.

Tutto quello che posso dire è che devi esaminare la tua allocazione con più attenzione e gestire le visualizzazioni che tieni in memoria in qualsiasi momento.

Esegui l'applicazione in Strumenti (Esegui - > Inizia con Performamce Tool - > Perdite) per vedere dove viene allocata la tua memoria.

Spero che questo aiuti!

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