Q:

GCD, order of execution?

Assume we have one UIVewcontroller, call it A, in the viewdidload of that VC we add to it two UIViewcontrollers( B,C ). now to make the UI smooth in the Viewdidload of A we do some GCD work
  dispatch_queue_t queue = dispatch_queue_create("CustomQueue", NULL);
  dispatch_async(queue, ^{
  // Create views, do some setup here, etc etc
  // Perform on main thread/queue
   dispatch_async(dispatch_get_main_queue(), ^{
     // this always has to happen on the main thread
    [self.view addSubview:myview1];
    [self.view addSubview:myview2];
    [self.view addSubview:myview3];
   });
 });

Now based on this code, am I guaranteed that the views will be added in the same order? view 1 , then 2 , then 3?
I am noticing that arbitrarily some views shows up before others !!

A:

Your problem is almost certainly this part:
  dispatch_async(queue, ^{
  // Create views, do some setup here, etc etc

You cannot do anything view-related (or really anything UIKit-related) on a background thread. Period.

