Entries

ゆとりiPhoneプログラマの為のメモリ管理

主にFlashのガベコレで脳が弛緩してる、ゆとりiPhoneプログラマ向けのメモリ管理術。しち面倒なRetainCountの管理を30秒で解決するよ。

1:とりあえず NSMutableDictionary を1個作る。このDictionaryはプロパティとして保持する。

2:alloc / init でインスタンスを作るときは、[[[ClassName alloc]init]autorelease] と必ずオートリリースをつける。

3:[NSString stringWith〜] のように、allocとinitを経ずにインスタンスを作る場合は、自分で勝手にretainをしない。

4:作成したインスタンスは持続的に必要な場合、NSMutableDictionary に突っ込む。

5:必要なくなったインスタンスは、NSMutableDictionary から remove する。

こうすると、全てのインスタンスはDictionaryに保持されている限り存在し、Dictionaryから外された後適当なタイミングで解放される為、あたかもiPhoneでガベージコレクションが使えるかのような感覚でコーディングできます。

原理としてはDictionaryに追加したオブジェクトは内部的にRetain Countが1個追加され、Dictionaryから外されたタイミングでRetain Countが1個減ることを利用しています。インチキっぽい技ですが、アプリの規模が小さい場合は、大分ラクチン。 removeAllObjectsでDictionaryの中身をすっとばせば、そのままAutoReleasePoolの代用品としてまで使えます。

ObjCをやるなら、ちゃんとRetainを抑えることに超したことはないのですが、flashからiPhoneに進出してきたにわかプログラマな僕は、ObjCに慣れるまでかなりお世話になりました。正直今でもたまに使ってます。