Obj-Cにおけるオブジェクトの扱いは、allocだったり、retainだったり、autoreleaseだったりとややこしいですね。
NSAutoreleasePoolのリファレンスによると、メインスレッドでイベントループの最初にNSAutoreleasePoolが作られ、イベントループの最後にreleaseが送られるということらしい。なのでイベントループが一周するごとにautoreleaseされたオブジェクトは解放されることになる。
autoreleaseされたオブジェクトが解放されるタイミング | インサイドフラッギング
iPhone OS 3.xで100MBを超えたJSONファイルをパースして、SQLiteに入れる必要があります。ひとつのシーケンスの中で、autoreleaseされたオブジェクトが大量に使われており、メモリ枯渇するという問題があって昨日から頭をひねっています。
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; /* なんかautoreleaseされたオブジェクトを返す */ id hoge = [piyo func]; [hoge retain]; [pool release]; /* hogeを使う処理 */ [puni ugougo:hoge];
NSAutoreleasePoolを上記の様にネストすると、ある程度改善されたのですが、それでもあまり状況は変わらないといったところ。