忍者ブログ
ちょっとは人のためになる事をしないとインターネットコミュニティーの皆様に申し訳がないかと思いながら、自分の備忘録ていどでしかなく、実際の所たいした情報も提供できないでいるブログ
[111] [110] [109] [108] [107] [106] [105] [104] [103] [102] [101]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

キューのキャンセル

- [NSOperationQueue cancelAllOperations] - [NSOperationQueue waitUntilAllOperaitonsAreFinished] を行なった後のキューに、あたらしいオペレーションを追加すると、変な場所で EXEC_BAD_ACCESS 例外が発生する。キャンセルしたキューは再利用しないで、再作成すべき。


複数のキューにまたがる依存・優先関係

複数のキューを作成し、 - [NSOperation addDependency] をもちいて、複数のキューをまたがる依存関係(dependency)を作ることが出きる。

平行実行数を押さえたキューと、無制限のキューを併用して、オペレーションの個数を制御しながら、OOB的なキューで終了や優先処理を行なうなどができる。単一のキューでごちゃごちゃ操作するより簡単。

キャンセル処理

- [NSOperation cancel] を受けたら、isFinished = YES に移行しないと、オペレーションがキューに溜まったままになる。特に、開始していないオペレーションに対する処理をわすれがち。


キューの平行動作数と子オペレーション、currentQueue の問題

子オペレーションを利用する場合、+ [NSOperationQueue currentQueue] で取得した現在のオペレーションキューに、子オペレーションを追加し、KVOで終了を待つ処理は危険

現在のオペレーションキューに、平行動作オペレーション数の余裕がないと、たちまちデッドロックする。
平行動作数を変更すれば動くようになるかもしれないが、キューの平行動作数に依存する実装は好ましくない。

子オペレーションを使う場合、そのオペレーションのインスタンスに NSOperationQueue を作成し、そこに子オペレーションを追加すると良い。

なお、平行実行数が無制限なら問題はおきない。平行実行数無制限で組んだあと、パフォーマンス調整のため、「フォアグラウンドが重いなら、バックグラウンド平行実行数をおさえりゃいいんじゃね?」的に - [NSOperationQueue setMaximumConcurrentOperations:] を加えた瞬間、うごかなくなったりするので気をつける。
 

PR

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


忍者ブログ [PR]
カレンダー
09 2019/10 11
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
フリーエリア
最新CM
[02/07 @naoshi65536]
[02/07 忍]
[09/18 とおりすがり]
[06/26 ilmare]
[03/16 とおりすがり]
最新TB
プロフィール
HN:
naoshi
性別:
男性
職業:
ソフトウェア技術者
趣味:
料理
自己紹介:
@naoshi65536 で連絡がつくはずです。
バーコード
ブログ内検索
カウンター
アクセス解析
FX NEWS

-外国為替-