【技術情報】iOS 4のNSOperationはGCD使用か否かの俺様用まとめ

ADCのリファレンスによれば、NSOperationはMac OS X 10.6以降でGrand Central Dispatch (GCD)を使用しますが、Mac OS 10.5やiOSでは直接実行すると書いてありました(2010.8.4)。 そのまま読むとiOS 4でもGCDは使われないのか?と思いきや、実際には使用されているそうなので、私が見かけたツイートを後学のためにまとめておきます。リファレンス更新されろ。
8
iphone_dev_jp @iphone_dev_jp

iOS4 では、NSOperation は GCD で実行されているのでしょうか‥ [@tucitter]

2010-08-03 18:56:10
iphone_dev_jp @iphone_dev_jp

.@tucitter シミュレータでしか確認してませんが、GCDが使われているようです。_dispatch_worker_thread2 とか _dispatch_call_block_and_release とか非公開のAPIのようですが。 [@ClimbAppDev]

2010-08-03 19:12:02
iphone_dev_jp @iphone_dev_jp

.@hkato193 NSOperation Class Reference には使っているようなことが書いてあるのですが(libdispatch library の記述のあたり)、どうなんでしょう。。英語に自信がありません。 [@ClimbAppDev]

2010-08-03 19:36:02
iphone_dev_jp @iphone_dev_jp

NSOperationの方には無く、NSOpearationQueueの方です。2つ目のNotesです。→ http://bit.ly/9KVlwR [@hkato193]

2010-08-03 19:48:02
iphone_dev_jp @iphone_dev_jp

.@hkato193 はい、そちらは確認しております。双方のリファレンスを読んでたぶん理解できました。GCDでも使われている libdispatch ライブラリを使ってるよ。GCDは使ってないよ。ということのようですね。御指摘ありがとうございました。 [@ClimbAppDev]

2010-08-03 20:08:02
iphone_dev_jp @iphone_dev_jp

.@tucitter 蒸し返すようですが、iOS 4 上では NSOperation は GCD で実行されています:https://devforums.apple.com/message/227128 ドキュメントは更新漏れかもしれません。 [@ppmtw]

2010-08-03 21:38:02
iphone_dev_jp @iphone_dev_jp

NSOperation の件、皆様どうもありがとうございました。NSDateFormatter もそうですが、Apple のドキュメントも結構不備があるのですね‥。 [@tucitter]

2010-08-04 22:56:04
Yuichi Fujishige @nakiwo

さっき実機で確認した。iOS4のNSOperationQueueはgcdベースです。前調べた通りで。。前も実機で確認してたかも。

2010-08-05 22:11:28
Yuichi Fujishige @nakiwo

isConcurrentがYESでもNOでも別スレッド(gcdのスレッドから)start->mainが呼ばれます。

2010-08-05 22:12:16
Yuichi Fujishige @nakiwo

NSOperationQueueの+ (id)mainQueueにOperationを入れると、MainThreadで実行されます。gcdのdispatch_get_main_queueと同じ役割。

2010-08-05 22:15:49
Yuichi Fujishige @nakiwo

mainQueueに入れるとき、OperationのisConcurrentは無視されてます。普通のqueueに入れても無視されるので同じです。

2010-08-05 22:16:47
Yuichi Fujishige @nakiwo

結論としてはiOS4のNSOperationQueueの挙動はOSX10.6と同じ、でいいと思います。

2010-08-05 22:17:13
Yuichi Fujishige @nakiwo

NSOperationQueueのリファレンスに、iOSではGCD使ってません、とありますが、OS3以前は確かにそうなので、あながち間違いでもない。OS4以後は10.6と同じ、という追記が必要に思います。

2010-08-05 22:18:33
Yuichi Fujishige @nakiwo

気になったのでlibdispatchのソースも見たり。 http://bit.ly/9Qrhww

2010-08-05 22:19:14