OK, here is the code.

```
NSObject* (^executableBlock)(void) = ^NSObject*() {
    __block NSObject *refObj = nil;

    [Utility performAction:^() {
         if (conditionA)
              refObj = fooA;
         else
              refObj = fooB;
    };

    return refObj;
};

NSObject *result = executableBlock();   // result is nil

```

After executing the executableBlock, the result is nil and performAction block didn't be executed immediately and returned my expected value.

I know performAction block is executed within another thread and using the shared nil pointer refObj. Refer to [Working with Blocks](https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html).

Here is my through, if I use GCD to call the performAction block and wait for its finish, how to rewrite it? Thanks!