iPhone – Perdita di Memoria – NSData dataWithContentsOfUrl & UIWebView

Si prega di aiutare! Sono stato a guardare questo per 12 ore; hanno guardato online e non riesce a trovare soluzione.

La mia domanda, io uso 2 UIView controlli in pagine separate/controller:

  • UIImageView (recupero di dati via
    NSData dataWithContentsOfUrl)
  • UIWebView

Per isolare il mio codice, e rendere più facile da spiegare, ho creato una nuova visualizzazione in base al progetto “MyTestApplication”

1 – ho aggiunto un semplice NSData dataWithContentsOfUrl in funzione di delegato.

NSData *imageData = [NSData dataWithContentsOfURL:
  [NSURL URLWithString:@"http://www.google.com/intl/en_ALL/images/logo.gif"]];

(Nulla di rilascio qui, perché è tutto utilizzando funzioni di comodo)

il testo alt http://img.skitch.com/20081110-j5tn5n7ixph95ys4rpchibaw5p.preview.jpg

View Image

2 – Eseguire per verificare che non vi siano perdite (come previsto)

il testo alt http://img.skitch.com/20081110-fy2qrkgy47hm4fe2f1aakd4muw.preview.jpg

View Image

3 – Aprire il ViewController.xib e aggiungere semplicemente una UIWebView dalla libreria (non c’è bisogno di legare in su)

il testo alt http://img.skitch.com/20081110-d63c3yh1a1kqiciy73q8uyd68j.preview.jpg

View Image

4 – Eseguire per verificare che non ci siano perdite! (perché???)

il testo alt http://img.skitch.com/20081110-qtxcfwntbcc3csabda3r6nfjg6.preview.jpg

View Image

Che cosa sto facendo di sbagliato? Si prega di aiutare!

Perché NSData causare la perdita di memoria se sto utilizzando la UIWebView? Io proprio non capisco.
Grazie.

OriginaleL’autore | 2008-11-11

4 Replies
  1. 5

    Ho anche problemi con perdite da NSData del dataWithContentsOfURL: l’iPhone simulator. Ho scoperto che quando ho usato l’altra convenienza metodo (dataWithContentsOfURL:options:error:) vorrei avere la perdita di memoria.

    Il mio codice sembrava qualcosa di simile a questo:

    NSURL *url = [NSURL URLWithString:urlString];
    NSError *error = nil;
    NSData *data = [NSData dataWithContentsOfURL:url
                                         options:0
                                           error:&error];

    Link a documentazione

    Visto questa stessa perdita di OS 3.1.2 (su sim e 3GS). Il tuo suggerimento fisso! Strano che NSDataReadingOptions non è apparentemente in iPhone SDK?

    OriginaleL’autore Sam

  2. 4

    Penso che questo è ciò che sta accadendo:

    Quando ViewController.xib è caricato, un’istanza di UIWebView è allocata e inizializzato. Siccome non sei il cablaggio è ovunque, non è sempre rilasciato. Penso che avete bisogno di per filo e rilasciare il tuo backup di Vista del Controller dealloc funzione. Mi ricordo di dover rilasciare manualmente ogni oggetto che ho creato in un file xib.

    non è vero. le cose in xib sono trattenuti da vista controller initWithNib e vengono rilasciati quando il controller di visualizzazione viene deallocato. e in ogni caso, se questo fosse vero, sarebbe anche mostrare la visualizzazione web e NSData come trapelato, che non è il caso

    OriginaleL’autore Justin Weiss

  3. 1

    Sono in esecuzione le Perdite sul Simulatore? Se è così, caveat coder. Il Simulatore di perdita di memoria in cui l’hardware di iPhone non. Nessun simulatore è mai una partita perfetta per l’esatto comportamento del codice sul dispositivo.

    Farei il test sul dispositivo. Ho appena fatto la stessa cosa su un problema simile con UITableViewController che stava perdendo la Sim ma non sul cellulare.

    OriginaleL’autore Genericrich

  4. 0

    [NSData dataWithContentsOfURL:url options:0 error:&error] non mi ha aiutato a iOS8.

    Ma dopo funziona correttamente:

    NSURLRequest* request = [NSURLRequest requestWithURL:imageURL];
    NSData* imageData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    [[NSURLCache sharedURLCache] removeCachedResponseForRequest:request];

    Codice di produzione avrebbe bisogno anche la risposta di errore e di parametri.

    OriginaleL’autore palob

Lascia un commento