1. oden@github

    Posted

    oden@github
Changes in title
+@background { } で、気軽にマルチスレッド処理を行う方法
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,46 @@
+お目汚し失礼致します。
+これは[iOS Second Stage Advent Calendar 2013](http://qiita.com/advent-calendar/2013/ios-2#day-23 "iOS Second Stage Advent Calendar 2013")の12月23日分の記事です。
+
+@synchronizedがあるんだから、@backgroundがあっても良いじゃない。
+そんな気持ちで書きました。
+
+### 1. マクロを定義します
+下記のようなマクロを定義します。
+下記のようなもんをマクロとは言わん、という意見は受け付けません。
+
+```objc:background-Prefix.pch
+#define background \
+try{}@finally{}\
+__block void (^backgroundBlock)();\
+[[NSOperationQueue mainQueue] addOperationWithBlock:^{\
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\
+ backgroundBlock();\
+ });\
+}];\
+backgroundBlock = ^
+```
+
+プリコンパイルドヘッダ(拡張子が.pchって感じのです)に入れれば、
+全てのソースファイルから照会できるので使いやすいかもしれません。
+
+### 2. 使います
+下記のような感じで使います。
+
+```objc:AppDelegate.m
+for (int i = 0; i < 10; i++)
+{
+ @background
+ {
+ NSLog(@"%d", i);
+ };
+}
+```
+
+バックグラウンドで処理が行われているので、
+結果は「0 1 2 3 4 6 5 7 9 8」とかそんな感じにバラけると思います。
+
+普通に0から9まで表示されることもあると思いますが、
+まあそんな時は10回と言わず100回もループすればバラけると思います。
+
+簡潔ではありましたが、24日のサンタ狩りの準備がありますので、
+このあたりで失礼させて頂きます。