From the daily archives: 火曜日, 8月 16, 2011

アプリの高速化をやろうとすると、どうしてもバックグラウンドで処理をさせるということがよくあります。
しかし、そのときに結構排他処理の書き方をよく忘れるのでメモっときます。
なんでよく忘れるかって言うと、なぜかこのコマンドだけ補完がきかないという・・・

■排他処理の書き方
[objc]
@synchronized(何かしらポインタ){
//処理内容
}
[/objc]

これでそれぞれのポインタごとに排他処理が出来ます。
一番よく使いそうなのはfor..inのときでしょうか。
for..inのときはその間に要素の追加/削除をするとエラーになってしまうので、別スレッドで扱うときはよう注意です。

例)
[objc]

//スレッド1
@synchronized(array){
for(id obj in array){
NSLog(@"%@",obj);
}
}

//スレッド2
@synchronized(array){
[array addObject:@"element"];
}

[/objc]