title: Objective C: async block structure VS async network request + completion block
body: <p>I have been using the following structure in my projects for consuming API data:</p>
  
  <pre><code>dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  dispatch_async(queue, ^{
      // SYNCHRONOUS network request
      // Data processing
      dispatch_async(dispatch_get_main_queue(), ^{
          // UI update
      });
  });
  </code></pre>
  
  <p>On the other hand, I have seen quite frequently another structure where the network request is asynchronous (i.e. using AFNetworking) and then the <strong>data processing</strong> and <strong>UI update</strong> are handled in the completion block (which is not async - I think).
  Here is an example of what I am saying:</p>
  
  <pre><code>NSURLRequest *request = [NSURLRequest requestWithURL:url];
  AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
  operation.responseSerializer = [AFJSONResponseSerializer serializer];
  [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    // Data processing
    // UI update
  } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // Error handling
  }];
  
  [operation start];
  </code></pre>
  
  <p>So, my questions are:</p>
  
  <ol>
  <li>In the second structure there the <strong>data processing</strong> is not being run asynchronously, it is?</li>
  <li>Why are we generally encouraged to run async network requests instead of sync ones from async blocks/threads.</li>
  <li>Why the second structure is much more known and spread than the first?</li>
  </ol>
  
  <p>Is there something that I am missing?</p>