Itt vagyok a része a fejlesztési folyamat nyomon követni a zúzó és memóriavesztés. Mint a stratégia, mit tegyen NSLog üzeneteket és értesítéseket néhány ilyen a didReceiveMemoryWarning:? Ez a dokumentáció az eljárás meglehetősen gyér. Ez pontosan azt jelenti, hogy mielőtt a baleset fog történni, a UIViewController indít, hogy a módszer? Ez egy kiindulási pont, mielőtt még megy előre Instruments?
iOS: segítőkészségét didReceiveMemoryWarning:
OK, néhány dolgot meg kell jegyeznünk:
- didReceiveMemoryWarning fogják hívni, mielőtt az out-of-memory összeomlik. Nem más összeomlik. Ha kezelni a figyelmeztetést megfelelően és memóriát szabadít fel, akkor elkerülhető az out-of-memória állapotát és nem lezuhan.
- Manuálisan is elindíthatja a memória figyelmeztetés a szimulátor alatt Hardware menüben. Nagyon ajánlom ezt, hogy tesztelje a kezelését didReceiveMemoryWarning.
- Műszerek segítségével a hibakeresés miatt (bár nem mindegyik) - ez nem igazán hasznos összeomlik.
- Nem, én személyesen nem használhatja NSLog - Csak típuspontjának emlékét figyelmeztetéseket én hibakeresés.
Ha a felhasználó elhagyta egyes alkalmazások megnyitása akkor nagyon kevés memóriát az Ön rendelkezésére. Így néha didReceiveMemoryWarninglehet nevezni a rendszer csak 1 MB használat.
A rendszer hívja ezt a módszert minden nézet vezérlők, ha a hely egy NSLog minden Ön szerint vezérlők, akkor észrevehetjük, hogy.
Ezután automatikusan módszerrel viewDidUnloadfogják hívni a rendszer az Ön összes nézet vezérlők (nem dealloc). Tehát meg kell tenni az összes felszabadítása utasításokat is.
Meg kell, hogy egy csomó kísérletet, mert ha az alkalmazás bonyolult akkor szembe sok összeomlik, mielőtt irányító jól.
UPDATE
Mivel iOS 6, UIViewControllermegnézve már nem rakhatók válasz memória figyelmeztetéseket. Ehelyett csak nem a legjobb, engedjen minden erőforrást tud ésszerűen újra létrehozni (pl tárolt adatok), ha didReceiveMemoryWarninghívják.
UPDATE
írtam eredeti válasz koromban egy mérges fiatalember; idők változtak, és alapvetően ez a baj.
Ha van egy app egyetlen nézetvezérlőben és kap egy memória figyelmeztetés, ott nem sokat tehet. De a dolgok változnak drasztikusan, ha több néző vezérlők, mert akkor kirak minden állam társított nem legelöl vezérlők. Sőt [UIViewController didReceiveMemoryWarning]majd nyomkodjuk meg a helyes irányba kirakodás a nem látható nézetben (meglepetés!). Amikor a legelső nézetvezérlőben elutasítja, a mögöttes nézet újratöltődik, és legfeljebb a felhasználó csak akkor tisztában késés, bár belsőleg az alkalmazás lehet tenni egy teljes újraindítást.
Ez nem egy részlet könnyen utólag, meg kell tartani a memória használat előtt tartva a kezdetektől, és tervezze meg a MultiView alkalmazást a tisztán unloadable UIViewControllerdarab. Tény, hogy érdemes megtartani a kódot összeegyeztethető a szimulátor csak használni a memória figyelmeztető funkciót.
Ha a memória bőséges, semmi sem terheletlen és minden selymesen sima, és ha kevés a memória a dolgok folyamatosan dolgozik, bár lassabban. Most azt mondják, hogy ez a megoldás, hogy a véges memória probléma ideális.
Ahhoz, hogy kihasználják ezt a memóriát szalon trükk, túl a UIViewControllermódszereket
viewDidLoad, viewDidUnloadés
viewWillUnload(iOS5, hasznos, ha a kirakodás állam előírja a céllal, hogy még mindig léteznek, például, ha nem akarja, hogy szivárog az OpenGL textúrák és megjelenítés puffer, a iOS4 lehet szimulálni ez a túlterhelés didReceiveMemoryWarningés nyomon követése a nézet láthatóságát).
EREDETI, TÖBB epés VÁLASZ
didReceiveMemoryWarning teljesen haszontalan.
Nincs garancia arra, hogy ha memóriát szabadít fel (akár az egészet), hogy nem fogja ölni.
Az én keserű tapasztalat ez általában működik, mint ez a 2.x / 3.0:
mediaserverd szivárog egy csomó memóriát
én app ölnek
Sajnos, a kaszás nem gondol gyilkos mediaserverd.
Tehát, ha a memóriahasználat nem a te hibád, akkor már tényleg csak két lehetősége van:
felkéri a felhasználót, hogy indítsa újra (felhasználó feltételezi, hogy ez a te hibád, ír egy gyilkos felülvizsgálat)
remélem, hogy a tettes összeomlik (mediaserverd gyakran kötelezi!)
A cél az, hogy didReceiveMemoryWarning ad egy esélyt a szabad memória, vagy pop nézetek, hogy elkerülje a balesetet. Ön nem kapja meg minden kiszámítható ponton, mert attól függ, hogy mit csinál a felhasználó. Például, ha a felhasználó hallgatja a iPod, akkor kevesebb memóriát és akkor kapja meg hamarabb.
Az általános szabály az, hogy kb 8MB RAM dolgozni. Amikor közeledik, hogy számíthat a rendezvény kell emelni. Ha szed fel, hogy mennyi RAM szándékosan ha kell egy tervet, hogy tegyünk ellene.













