NSAutoReleasePoolの作成&解放タイミングについて
@norio_nomura はい、試してみたのですが普段と変わりはありませんでした。確認出来る範囲ではshowPoolsの階層が1つ減っただけで、特に動作の問題は無しです。終了時も然り(もともとmainまで戻らないですが)。
2010-03-29 22:43:29main()が呼ばれたすぐ後にautoreleaseされるオブジェクトを作ってみたけれど、特に落ちたりはしなかった。もちろん、その後で作るプールにも登録されていない。ふむふむ。
2010-03-29 22:39:43@monokakido あ、出ていました。autoreleaseしたタイミングで「…autoreleased with no pool in place - just leaking」と出ました。ご指摘ありがとうございます。
2010-03-29 22:49:47ということは、スレッド作るときにAutoReleasePoolを作っているかどうかはランタイムでも確認できるということか(いや、設計の段階でそんなポカはしないですが)。
2010-03-29 22:51:40@hkato193 なるほど、ありがとうございます。 UIApplicationMain は行儀よくつくられてるのですね。
2010-03-29 22:47:07@norio_nomura こちらこそ、お馬鹿な呟きから付き合っていただいたので恐縮しています。ありがとうございます。
2010-03-29 22:54:32CoreFoundationのソースコードがOpenSourceのページに見つからないなど。少なくとも書籍Dynamic ObjC出版時とは様相が違う。 http://www.apple.com/opensource/
2010-03-29 23:20:07CoreFoundationのソースコード発見。10.6.2はここ→ http://www.opensource.apple.com/release/mac-os-x-1062/
2010-03-29 23:21:54@hkato193 pthread_getspecific(__CFTSDKeyRunLoop) で取得できなければ作ってpthread_setspecificしてますね。
2010-03-29 23:28:40@monokakido ありがとうございます。ちょうどその場所を読んでいました。staticな__CFRunLoopsディクショナリにも入れつつ、各スレッドの固有データ領域に突っ込んでいますね。
2010-03-29 23:36:37@hkato193 横から失礼します。arrayWithObjectなどの生成メソッド(alloc, initなしでオブジェクトを生成)をいつでも使えるようにするためには、ApplicationMainの前でプールを作るのは妥当だと思うのですが。と、論点ずれていたらすみません!
2010-03-29 22:52:45@natsun_happy ご指摘ありがとうございます。今得た知識を総動員させてください。えっと、アプリケーションのRunLoopを使わない環境ではプール作成は仰るとおり絶対必要だと思います。ただ、mainがプール作成する必要が本当にあるのかなと疑問に思ったのが発端なのです。
2010-03-29 23:04:56@natsun_happy プールの提供方針として、XXApplicationMain関数の最初と最後でプール作成&解放したり、スレッドであれば指定処理の前後にコッソリとプール処理を入れておくのもあり得ると思います。しかし、実際にはそうしていない。何故かなあ、と。
2010-03-29 23:07:47@hkato193 なるほど、思ったより奥が深かったです。失礼いたしました。みなさまのツイートざっと追って、なんとなく理解しました。
2010-03-29 23:20:39CoreFoundationって面白いなり。いやしかし、NSThreadを使うための調査が、どうしてこうなった感がそこはかとなくありますですよ。皆さん、ありがとうございます。
2010-03-29 23:49:31