Jsem na straně mého procesu vývoje pro vystopování se selháním a paměťových úniků. Jako strategie, si dát žádné zprávy NSLog nebo upozornění na něco podobného do didReceiveMemoryWarning:? Dokumentace pro tuto metodu je poměrně řídké. To je přesnější říci, že předtím, než srážka se stane se UIViewController spustí tuto metodu? Je to výchozí bod ještě předtím, než jít dopředu s přístrojem?
iOS: vstřícnost didReceiveMemoryWarning:
OK, několik věcí, aby na vědomí:
- didReceiveMemoryWarning bude volána před havárii out-of-memory. Není jiné pády. Máte-li zvládnout varování správně a uvolnit paměť, pak se můžete vyhnout podmínku z důvodu nedostatku paměti a nespadne.
- Můžete ručně vyvolat varování paměti v simulátoru v nabídce hardwaru. Velmi doporučuji dělat to vyzkoušet své manipulace didReceiveMemoryWarning.
- Instruments pomáhá ladění úniky (ačkoli ne všichni) - není to opravdu tak užitečná pro pády.
- Ne, nemám osobně používám NSLog - Jen jsem zarážku varování paměti, když jsem ladění.
V případě, že uživatel opustil některé aplikace otevřít, budete mít velmi málo paměti k dispozici. Takže někdy didReceiveMemoryWarningmůže být nazýván systémem až po 1 MB použití.
Systém volá tuto metodu na všechny vaše pohledu regulátorů, pokud umístíte NSLog v každé ze svých pohledů regulátorů, všimnete si, že.
Pak automaticky metoda viewDidUnloadbude volána systému na všech řadičích View (ne dealloc). Takže musíte dát všechny své instrukce deallocation tam.
Budete muset dělat spoustu pokusů, protože pokud vaše aplikace je komplexní budete čelit velké množství dopravních nehod, než jeho řízení dobře.
UPDATE
Jak iOS 6, UIViewControllerzobrazení již nejsou vyloženy v reakci na varování paměti. Místo toho prostě dělat to nejlepší, aby propustila všechny zdroje, které lze rozumně znovu vytvořit (např data uložená v mezipaměti), když didReceiveMemoryWarningje volána.
UPDATE
jsem napsal svou původní odpověď, když jsem byl rozhněvaný mladý muž; Časy se změnily a v podstatě, je to špatně.
Pokud máte aplikaci s jedním řadičem zobrazení a zobrazí varování paměti, že to není moc, co můžete udělat. Ale věci se dramaticky změní, když máte více řadičů zobrazení, protože si můžete vyložit celý stav spojený s non nejpřednější regulátorů. Ve skutečnosti [UIViewController didReceiveMemoryWarning]vás prod správným směrem tím, vyložení vaše non-viditelné výhled pro vás (překvapení!). Když je nejvíce vpředu pohled regulátor zamítl, základní pohled se znovu načte a nanejvýš uživatel by měl být pouze vědom zpožděním, i když vnitřně vaše aplikace může být provedena kompletní restart.
To není nějaký detail můžete snadno vybavit, je třeba mít na paměti využití paměti od začátku a navrhnout MultiView aplikaci do čistě unloadable UIViewControllerkusů. Ve skutečnosti je to stojí za to udržet váš kód kompatibilní se simulátorem jen používat svůj varovný paměťová funkce.
Je-li dostatek paměti, nic není vyložen a vše je hedvábně jemná, a pokud je nízká paměťová věci pokračovat v práci, i když pomaleji. Teď bych říci, že toto řešení konečných paměti problém je ideální.
Chcete-li využít této paměti salonu trik, přetížení UIViewControllermetod
viewDidLoad, viewDidUnloada
viewWillUnload(iOS5, což je užitečné v případě vykládání stav vyžaduje, aby váš pohled na stále přetrvávají, například pokud nechcete unikat své OpenGL textury a činí vyrovnávací paměti, na iOS4 můžete simulovat tento přetížením didReceiveMemoryWarninga sledování viditelnost pohled je).
ORIGINAL, VÍCE žlučových ANSWER
didReceiveMemoryWarning Je naprosto zbytečné.
Neexistuje žádná záruka, že pokud se uvolnit paměť (i to všechno), které nebude zabít.
V mé hořké zkušenosti je to obvykle funguje takhle na 2.x / 3.0:
mediaserverd nevrací spoustu paměti
moje app zabit
Bohužel, sekačka nikdy myslí na zabíjení mediaserverd.
Takže v případě, že využití paměti není vaše chyba, že jste opravdu dostal jen dvě možnosti:
požádá uživatele o restart (uživatel předpokládá, že je to vaše chyba, píše kousavou recenzi)
doufají, že viník se zhroutí (mediaserverd často nutí!)
Účelem didReceiveMemoryWarning je poskytnout vám možnost uvolnit paměť nebo pop názory, aby se zabránilo zhroucení. Nebudete dostávat jej kdykoli předvídatelném místě, protože to závisí na tom, co uživatel dělá. Například, pokud je uživatel poslouchá iPod, tam je méně dostupné paměti a budete jej obdržel dříve.
Obecným pravidlem je, že máte o 8MB RAM pro práci s. Když se dostanete blízko, že můžete očekávat, že událost má být zvýšen. Pokud užíváte až tolik RAM záměrně, měli byste mít plán, jak s tím něco udělat.













