title: Core Data's NSPrivateQueueConcurrencyType and sharing objects between threads
body: <p>iOS 5 introduced a new way to quickly fetch data on a background thread by initializing the MOC using <code>NSPrivateQueueConcurrencyType</code> and then doing the fetch in <code>performBlock:</code></p>
  
  <p>One of the rules of thumb of Core Data has been that you can not share a managed object between threads/queues. Is it still the case with <code>performBlock:</code>? Is the following:</p>
  
  <pre><code>[context performBlock:^{
      // fetch request code
  
      NSArray *results = [context executeFetchRequest:request error:nil];
  
      dispatch_async(dispatch_get_main_queue(), ^(void) {
          Class *firstObject = [results objectAtIndex:0];
          // do something with firstObject
      });
  }];
  </code></pre>
  
  <p>still unacceptable since I'm sharing my results array/objects between the bg queue and the main queue? Do I still need to use the managed object IDs to do that?</p>