2013-10-05 10 views
56

In un certo punto (consistente) quando la mia applicazione è in esecuzione, ho sempre il messaggio di errore XcodeÈ possibile eseguire il debug di "Terminato a causa di un errore di memoria"?

interrotta a causa di errore di memoria.

Non riesco a trovare il codice che causa l'errore, ma posso dire quale codice è vicino all'errore (utilizzando i punti di interruzione).

L'errore è causato direttamente dopo il ritorno di una certa cellula del mio implemenation del metodo delegato

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

UITableViewDataSource. Posso confermare che sta restituendo un valido UITableViewCell, ma penso che spiegare e pubblicare l'intero metodo sarebbe uno spreco di tempo. Tuttavia, ho il sospetto che potrebbe essere causato da una rapida e massiccia allocazione di memoria.

Dice sicuramente Terminated due to memory error, non la pressione della memoria.

Mi piacerebbe sapere cosa significa realmente il messaggio. Inoltre, c'è un modo per eseguire il debug di questo messaggio? Nessun rapporto di arresto anomalo viene generato.

Sto usando ARC e iOS 7.

+1

ho visto lo stesso errore in Xcode. La mia app si bloccava perché stavo creando un UIWebView super alto (superiore a 20000 pixel). Non sono mai stato in grado di trovare un rapporto di arresto anomalo, né di trovare un modo per ottenere avvisi di memoria prima del crash. –

+0

@HeathBorders Sto usando anche UIWebview. È molto interessante. Dovrò controllare l'altezza sulla mia. Grazie! –

+0

Questo è un tipo di errore comune con questi componenti. Le possibili cause sono: in qualche modo stai generando troppe celle (controlla i tuoi calcoli), le dimensioni delle tue celle sono sbagliate (come dividendo per 0 generando un nan che è una specie di numero infinito quando si creano le dimensioni). o incorrere in un ciclo infinito. – Pochi

risposta

2

Modifica del regime, in Diagnostica troverete diverse opzioni a guardia allocazioni. Refer to the documentation for details.

La domanda è: in realtà dice "terminato a causa di errore di memoria" e non "pressione"? Controlla gli strumenti se la tua app ha poca memoria, se l'app sembra non avere abbastanza memoria allora è quello su cui dovresti concentrarti indipendentemente dal messaggio esatto.

+0

Definisce sicuramente "errore" non "pressione". Il livello di memoria è costantemente di circa 15 MB al momento del crash. –

+0

Quindi provare con la diagnostica malloc abilitata. Btw stai testando su un dispositivo? – LearnCocos2D

+0

sì im test su dispositivo - iPad 3a gen –

3

Ho avuto esattamente lo stesso problema. Pensavo che il mio programma avesse perdite di memoria o che si usasse troppa memoria. Uso gli strumenti e utilizzo l'assegnazione del profilo e il programma funziona bene. Inoltre ho eseguito il programma per dispositivo abbastanza a lungo, e funziona anche bene.

Anche io uso iPad 3rd Gen per il debug, potrebbe causare il rallentamento del dispositivo o del bug, sembra solo Xcode e si sta verificando il problema Xcode. Non il problema di perdita di memoria o allocazione.

Se assicurarsi con strumenti e applicazioni in esecuzione sul dispositivo stesso e lavorare

+0

Hmmm. Tutti quelli che hanno partecipato a questo post hanno provato su iPad 3rd gen. Coincidenza? –

+0

Sei riuscito a riprodurre l'errore su un altro dispositivo? –

+0

Uso solo iPad 3rd gen quindi non ne sono ancora sicuro. Oggi ho ordinato mini retina per iPad, quindi posso rispondere in modo dimostrabile la prossima settimana;) –

40

stavo ottenendo questo errore e non riuscivo a capire cosa non andava.

Dopo alcune ricerche ho scoperto che ho dimenticato di disabilitare gli zombi.

Per disabilitare effettuare le seguenti operazioni:.

Select edit scheme

Deselect "Enable Zombie Objects

+0

Non so qual è la relazione degli zombi con tableview ... –

+3

Quando gli zombi sono abilitati, tutto viene influenzato dal momento che gli oggetti non vengono deallocati. Questo riempie la memoria molto velocemente nel caso di una vista tabella in cui vengono allocate e deallocate molte cose. Definizione di Abilita Zombi: Sostituisci oggetti deallocati con un oggetto "zombi" che intrappola qualsiasi tentativo di usarlo. Quando si invia un messaggio a un oggetto zombi, il runtime registra un errore e va in crash. Puoi guardare il backtrace per vedere la catena di chiamate che ha attivato il rilevatore di zombi. – zirinisp

+0

Ancora, sto affrontando il problema. Per favore guidami. –

4

mi trovai di fronte lo stesso problema ("terminato a causa di errore di memoria") Avevo provato quanto sopra tutte le risposte ma niente funziona per me. Quindi eseguo il debug del mio codice e ho scoperto che un ciclo for è in esecuzione per il tempo infinito con l'allocazione della memoria a un array con valore nil ogni volta.il suo uso 300 + MB in modo da dare questo errore

Grazie.

+0

U mi ha salvato il tempo. Grazie. –

2

Stavo usando Tesseract per OCR e quando il mio testo di destinazione è stato scansionato, doveva suonare una GIF. Quando la GIF ha iniziato a suonare, c'era un picco di memoria, da 70-80 MB a 450 MB. Il problema era che GIF stava prendendo troppa memoria, l'app si sarebbe bloccata e Xcode avrebbe mostrato quel messaggio. Così ho rimosso il relativo imageView dalla superview del ViewController.

imageView.removeFromSuperview 

Dopo questo, l'applicazione sarebbe ancora picco di 450 MB, ma poi subito rilasciare e giunta fino a 40MB

Problemi correlati