2014/05/08

[iOS][Objective-C]NSOperationQueueのnil化について

昨日、sendAsynchronousRequest:queue:completionHandler:について書きましたが、このメソッドは非同期かつ、

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
としているため、マルチスレッドで実行してしまう。

そこで、問い合わせ中は、上のメソッドを実行してほしくない場合として下のように実装しました。
//NSOperationQueue *queue;
if(queue != nil){return;}

queue = [[NSOperationQueue alloc] init];
NSURLRequest *request;
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
  //処理を書く
  dispatch_async(dispatch_get_main_queue(),^{
    queue = nil;
  });
}];
こうすれば再度、この処理が呼ばれても、問い合わせ中は、queueにobjectが設定されているため、nilではなくなるので、処理をせずにすむのかなと。

これは便利なんで、コピペできるようにしとこーっと。

0 コメント:

コメントを投稿