Remove deprecation warning for RCTExecuteOnMainThread

Summary:
As per janicduplessis recommendation, provide a new synchronous method to replace the necessary synchronous calls and use a warning in the comments (and method name).

**Motivation**

There are currently a number of XCode warnings that show up in a fresh 0.40 install of a react native project. While the project can still be run, this contributes negatively to the development experience -- valid warnings may be ignored and new ones may be added as per https://en.wikipedia.org/wiki/Broken_windows_theory

This addresses one of the warnings, by providing the functionality of a deprecated method in two specific cases where we can't avoid doing synchronous work on the main queue. See https://github.com/facebook/react-native/issues/11736 for more context.

**Test plan (required)**

I ran a project that relied on screen size and it didn't crash...happy to do more involved testing if someone can share better methodology.
Closes https://github.com/facebook/react-native/pull/11817

Differential Revision: D4402911

fbshipit-source-id: 9fd8b3f50d34984b765fe22b1f4512e103ba55a9
This commit is contained in:
Neil Sarkar 2017-01-10 23:01:07 -08:00 committed by Facebook Github Bot
parent 40f2b1bbb7
commit 00d5674474
2 changed files with 22 additions and 5 deletions

View File

@ -29,7 +29,7 @@ RCT_EXTERN id RCTJSONClean(id object);
// Get MD5 hash of a string
RCT_EXTERN NSString *RCTMD5Hash(NSString *string);
// Check is we are currently on the main queue (not to be confused with
// Check if we are currently on the main queue (not to be confused with
// the main thread, which is not neccesarily the same thing)
// https://twitter.com/olebegemann/status/738656134731599872
RCT_EXTERN BOOL RCTIsMainQueue(void);
@ -38,6 +38,10 @@ RCT_EXTERN BOOL RCTIsMainQueue(void);
// this will execute immediately if we're already on the main queue.
RCT_EXTERN void RCTExecuteOnMainQueue(dispatch_block_t block);
// Legacy function to execute the specified block on the main queue synchronously.
// Please do not use this unless you know what you're doing.
RCT_EXTERN void RCTUnsafeExecuteOnMainQueueSync(dispatch_block_t block);
// Deprecated - do not use.
RCT_EXTERN void RCTExecuteOnMainThread(dispatch_block_t block, BOOL sync)
__deprecated_msg("Use RCTExecuteOnMainQueue instead. RCTExecuteOnMainQueue is "

View File

@ -252,6 +252,19 @@ void RCTExecuteOnMainQueue(dispatch_block_t block)
}
}
// Please do not use this method
// unless you know what you are doing.
void RCTUnsafeExecuteOnMainQueueSync(dispatch_block_t block)
{
if (RCTIsMainQueue()) {
block();
} else {
dispatch_sync(dispatch_get_main_queue(), ^{
block();
});
}
}
void RCTExecuteOnMainThread(dispatch_block_t block, BOOL sync)
{
if (RCTIsMainQueue()) {
@ -272,9 +285,9 @@ CGFloat RCTScreenScale()
static CGFloat scale;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
RCTExecuteOnMainThread(^{
RCTUnsafeExecuteOnMainQueueSync(^{
scale = [UIScreen mainScreen].scale;
}, YES);
});
});
return scale;
@ -289,9 +302,9 @@ CGSize RCTScreenSize()
static CGSize size;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
RCTExecuteOnMainThread(^{
RCTUnsafeExecuteOnMainQueueSync(^{
size = [UIScreen mainScreen].bounds.size;
}, YES);
});
});
return size;