GCD を使用したマルチスレッドのスキルを習得しているときに、いくつかの質問に出くわしました。次のメソッドがあるとします。
- (void)method {
NSString *string= [NSString string]; //will be autoreleased
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//very very lengthy operation...
NSLog(@"%@", string); //is it safe?
});
}
ブロックの実行前に文字列を保持する必要があると思うので、これが正しいかどうか疑問に思っています。実際、イベントループが終了し、ブロックでstring
使用する前に自動解放メッセージを送信するのではないかと心配してstring
います。それはプログラムをクラッシュさせるでしょう。
私は正しいですか?保持および解放メッセージを送信する必要string
がありますか、これは正しい実装ですか? 前もって感謝します!