Apple は、静的グローバルまたは __block ストレージ型を使用して外部変数を変更することをお勧めします。
dispatch_async() には、引数のないブロックが必要です。
そのブロック内から self.prop を変更する最もクリーンで安全な方法は何ですか?
アトミックセッターを使用しますか?
ブロックをブロックで包みますか?
メインスレッドにディスパッチしますか?
私のシナリオ: ブロックはネットワーク リクエストを行っています。完了したら、返されたデータの一部を解析し、いくつかの異なるオブジェクトにプロパティを設定して、フォローアップのネットワーク リクエストを作成できるようにする必要があります。ブロックは非同期で処理されていますが、ユーザー入力に応じて、最初のブロックから必要なデータを含む 2 番目のブロックがキューに送信される可能性があります。これが私がやりたいことです。
@implementation MyNetworkManager {
dispatch_queue_t op_queue;
NSURL *_redirectedURL;
}
void (^initPageOperation) (void) = ^(void) {
NSURL *url;
NSMutableURLRequest *urlRequest;
url = [NSURL URLWithString:domain];
urlRequest =
[NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:5];
[urlRequest setHTTPMethod:@"GET"];
NSData *data = nil;
NSURLResponse *urlResponse = nil;
NSError *err = nil;
data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&urlResponse
error:&err];
if (urlResponse) {
if (![urlResponse.URL isEqual:url]) {
//Here's where I want to set the redirectedURL.
_redirectedURL = urlResponse.URL;
}
}
};