[ReactNative] Add RCTAssertThread and restrict -[UIManager addUIBlock:] to _shadowQueue

Summary:
@public

Add `RCTAssertThread` to `RCTAssert.h` for convenience when checking the current/queue,
it accepts either a `NSString *`, `NSThread *` or `dispatch_queue_t` as the object to be checked

Also add a check to `-[RCTUIManager addUIBlock:]` - There was a discussion on github (https://github.com/facebook/react-native/issues/1365)
due to the weird behavior caused by calling it from a different thread/queue (it might be added after `batchDidComplete` has been called
and will just be dispatched on the next call from JS to objc)

Test Plan:
Change `-[RCTAnimationExperimentalManager methodQueue]` to return `dispatch_get_main_queue()` and run the 2048 example,
it should dispatch with a helpful message (screenshot on the comments)
This commit is contained in:
Tadeu Zagallo
2015-05-25 05:19:53 -07:00
parent c91e2eb567
commit 9062bda79b
6 changed files with 55 additions and 29 deletions

View File

@@ -390,6 +390,10 @@ static NSDictionary *RCTViewConfigForModule(Class managerClass, NSString *viewNa
- (void)addUIBlock:(RCTViewManagerUIBlock)block
{
RCTAssertThread(_shadowQueue,
@"-[RCTUIManager addUIBlock:] should only be called from the "
"UIManager's _shadowQueue (it may be accessed via `bridge.uiManager.methodQueue`)");
if (!self.isValid) {
return;
}