2010年4月23日金曜日

autoreleaseのタイミング

前回のわたくしのNSIndexPathについてのポストで、autoreleaseだとメモリ圧迫しちゃうねぇなどと書きましたが。

Xcodeで自動で生成されるソースを見ると、main.mに

int main(int argc, char *argv[])
{

  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  int retVal = UIApplicationMain(argc, argv, nil, nil);
  [pool release];
  return retVal;
}

などとありまして、ああautoreleaseにした奴はアプリケーションが終了するまでプールされっぱなしなのだな、これは気をつけなきゃいけないなと思っていたのですが。

敢えてautoreleaseにしてたオブジェクトが予期せぬタイミングで初期化されていてエラーで落ちるという現象が起きてびっくり。調べてみたら全く同様の事を記事にしてらっしゃる方がいました。

http://insideflag.blogspot.com/2009/08/autorelease.html

どうやらUIKitでは、イベント発生でプールが作られて終了でreleaseされるようです・・・。なんてこった。いや楽になってよかった。

0 件のコメント:

コメントを投稿