title: Why NSOperationQueue is faster than GCD or performSelectorOnMainThread when they process a large number of tasks on the main Thread?
body: <p>for example, i have 100 times the for loop. and need to update UIImageView,and the last 2 method is same slowly. why? what is the different between they?</p>
  
  <pre><code>//fastest
      [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                         [btnThumb setImage:[UIImage imageWithData:data] forState:UIControlStateNormal];
                          [scrollView addSubview:btnThumb];
                     }];
  //slowly
                       dispatch_async(dispatch_get_main_queue(), ^
                      {
                          [btnThumb setImage:[UIImage imageWithData:data] forState:UIControlStateNormal];
                          [scrollView addSubview:btnThumb];
                      });       
  //slowly
                     [btnThumb setImage:[UIImage imageWithData:data] forState:UIControlStateNormal];
                     [self performSelectorOnMainThread:@selector(testMethod:) withObject:[NSArray arrayWithObjects:scrollView, btnThumb, nil] waitUntilDone:NO];
  
      -(void) testMethod:(NSArray*)objs
      {
  
          UIScrollView *scroll = [objs objectAtIndex:0];
          UIButton *btn = [objs lastObject];
          [scroll addSubview:btn];
      }
  </code></pre>