Posted at

@background { } で、気軽にマルチスレッド処理を行う方法

More than 5 years have passed since last update.

お目汚し失礼致します。

これは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日のサンタ狩りの準備がありますので、

このあたりで失礼させて頂きます。