mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-03-26 23:24:06 +08:00
[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:
@@ -60,3 +60,20 @@ void RCTAddAssertFunction(RCTAssertFunction assertFunction)
|
||||
RCTCurrentAssertFunction = assertFunction;
|
||||
}
|
||||
}
|
||||
|
||||
NSString *RCTCurrentThreadName(void)
|
||||
{
|
||||
NSThread *thread = [NSThread currentThread];
|
||||
NSString *threadName = [thread isMainThread] ? @"main" : thread.name;
|
||||
if (threadName.length == 0) {
|
||||
#if DEBUG // This is DEBUG not RCT_DEBUG because it *really* must not ship in RC
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
threadName = @(dispatch_queue_get_label(dispatch_get_current_queue()));
|
||||
#pragma clang diagnostic pop
|
||||
#else
|
||||
threadName = [NSString stringWithFormat:@"%p", thread];
|
||||
#endif
|
||||
}
|
||||
return threadName;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user