お目汚し失礼致します。
これはiOS Second Stage Advent Calendar 2013の12月23日分の記事です。
@synchronizedがあるんだから、@backgroundがあっても良いじゃない。
そんな気持ちで書きました。
1. マクロを定義します
下記のようなマクロを定義します。
下記のようなもんをマクロとは言わん、という意見は受け付けません。
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. 使います
下記のような感じで使います。
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日のサンタ狩りの準備がありますので、
このあたりで失礼させて頂きます。