Ho passato in rassegna molti post relativi alla gestione della memoria, ARC, tecniche di gestione della memoria come autoreleasepool
e l'uso dello strumento strumenti per rilevare quale codice causa l'avvertimento della memoria ma in Nel mio caso non sono in grado di capire la causa esatta.Come trovare la vera causa di avviso di memoria e come risolvere nell'app per iOS
dettagli di base che è necessario conoscere l'applicazione:
Abbiamo sviluppato un app iPad. In questo caso dobbiamo utilizzare più di 2000 immagini in alcuni casi, quindi quando la mia app non viene visualizzata non vogliamo mostrare loro un'immagine segnaposto (requisito del client). Per ottenere ciò, abbiamo utilizzato
SDWebImage
, archiviamo le immagini su disco e dopo di noi stanno caricando le immagini da lì.Ci sono così tante animazioni core che ho eseguito come "Gennie effect", display pop-up e tante altre core animazioni.
Abbiamo usato ARC nel nostro progetto e abbiamo scoperto che a causa di avviso di memoria applicazione si blocca in modo casuale.
Abbiamo usato Strumenti "Assegnazione" per trovare la memoria sporca.
In precedenza analizziamo i registri e abbiamo memorizzato le immagini con SDWebImage
in DISK, risolve spesso il blocco dell'applicazione, ma l'app continua a bloccarsi a causa di un avviso di memoria.
Quando andiamo in profondità, abbiamo scoperto che "VM anonime" continua a incassare e non rilascia memoria quando si passa da uno schermo all'altro di iPad.
Ecco lo screenshot della profilazione della nostra app sul dispositivo.
Chiunque si prega di suggerire consigli o tecniche di codifica o di qualsiasi idea da cui possiamo ridurre il carico di memoria e risolvere avviso di memoria.
Qualsiasi aiuto sarà apprezzato. Grazie.
La radice del problema è "più di 2000 immagini in alcuni casi". Avere troppe immagini caricate in memoria consumerà tutta la tua RAM. Non c'è modo di aggirare questo problema di base. Assicurati di caricare immagini con UIImage imageWithContentsOfFile anziché imageNamed in modo che non tutte le immagini vengano automaticamente memorizzate nella cache. Questo dovrebbe risolvere la maggior parte dei tuoi problemi, ma assicurati di conservare solo le immagini effettivamente necessarie in memoria. – MoDJ