mirror of
https://github.com/status-im/react-native.git
synced 2025-01-28 02:04:55 +00:00
Added explicit init to observer modules
Summary: Modules which call JS methods directly, or use `sendDeviceEventWithName:`, can trigger effects in JS without ever being referenced from the JS code. This breaks some assumptions in my earlier diff about when modules can be lazily loaded. Pending a better solution, I've put explicit `init` methods in these modules to ensure they are eagerly initialized (the downside to this is that they'll still be initialized even if they are never used). Reviewed By: javache Differential Revision: D3258232 fb-gh-sync-id: f925bc2e5339c1fbfcc244d4613062c5ab848fc2 fbshipit-source-id: f925bc2e5339c1fbfcc244d4613062c5ab848fc2
This commit is contained in:
parent
a9a90aa2f0
commit
e72163f0f2
@ -21,6 +21,13 @@ NSString *const RCTOpenURLNotification = @"RCTOpenURLNotification";
|
|||||||
|
|
||||||
RCT_EXPORT_MODULE()
|
RCT_EXPORT_MODULE()
|
||||||
|
|
||||||
|
- (instancetype)init
|
||||||
|
{
|
||||||
|
// We're only overriding this to ensure the module gets created at startup
|
||||||
|
// TODO (t11106126): Remove once we have more declarative control over module setup.
|
||||||
|
return [super init];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setBridge:(RCTBridge *)bridge
|
- (void)setBridge:(RCTBridge *)bridge
|
||||||
{
|
{
|
||||||
_bridge = bridge;
|
_bridge = bridge;
|
||||||
|
@ -59,10 +59,20 @@ RCT_EXPORT_MODULE()
|
|||||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (instancetype)init
|
||||||
|
{
|
||||||
|
// We're only overriding this to ensure the module gets created at startup
|
||||||
|
// TODO (t11106126): Remove once we have more declarative control over module setup.
|
||||||
|
return [super init];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setBridge:(RCTBridge *)bridge
|
- (void)setBridge:(RCTBridge *)bridge
|
||||||
{
|
{
|
||||||
_bridge = bridge;
|
_bridge = bridge;
|
||||||
|
|
||||||
|
// TODO: if we add an explicit "startObserving" method, we can take this out
|
||||||
|
// of the application startup path
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||||
selector:@selector(handleLocalNotificationReceived:)
|
selector:@selector(handleLocalNotificationReceived:)
|
||||||
name:RCTLocalNotificationReceived
|
name:RCTLocalNotificationReceived
|
||||||
|
@ -303,7 +303,7 @@ RCT_EXTERN NSArray<Class> *RCTGetModuleClasses(void);
|
|||||||
|
|
||||||
// The executor is a bridge module, but we want it to be instantiated before
|
// The executor is a bridge module, but we want it to be instantiated before
|
||||||
// any other module has access to the bridge, in case they need the JS thread.
|
// any other module has access to the bridge, in case they need the JS thread.
|
||||||
// TODO: once we have more fine-grained control of init (D3175632) we can
|
// TODO: once we have more fine-grained control of init (t11106126) we can
|
||||||
// probably just replace this with [self moduleForClass:self.executorClass]
|
// probably just replace this with [self moduleForClass:self.executorClass]
|
||||||
if (!_javaScriptExecutor) {
|
if (!_javaScriptExecutor) {
|
||||||
id<RCTJavaScriptExecutor> executorModule = [self.executorClass new];
|
id<RCTJavaScriptExecutor> executorModule = [self.executorClass new];
|
||||||
|
@ -19,6 +19,13 @@ static NSDictionary *RCTParseKeyboardNotification(NSNotification *notification);
|
|||||||
|
|
||||||
RCT_EXPORT_MODULE()
|
RCT_EXPORT_MODULE()
|
||||||
|
|
||||||
|
- (instancetype)init
|
||||||
|
{
|
||||||
|
// We're only overriding this to ensure the module gets created at startup
|
||||||
|
// TODO (t11106126): Remove once we have more declarative control over module setup.
|
||||||
|
return [super init];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setBridge:(RCTBridge *)bridge
|
- (void)setBridge:(RCTBridge *)bridge
|
||||||
{
|
{
|
||||||
_bridge = bridge;
|
_bridge = bridge;
|
||||||
|
@ -116,6 +116,13 @@ RCT_EXPORT_MODULE()
|
|||||||
|
|
||||||
@synthesize bridge = _bridge;
|
@synthesize bridge = _bridge;
|
||||||
|
|
||||||
|
- (instancetype)init
|
||||||
|
{
|
||||||
|
// We're only overriding this to ensure the module gets created at startup
|
||||||
|
// TODO (t11106126): Remove once we have more declarative control over module setup.
|
||||||
|
return [super init];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setBridge:(RCTBridge *)bridge
|
- (void)setBridge:(RCTBridge *)bridge
|
||||||
{
|
{
|
||||||
_bridge = bridge;
|
_bridge = bridge;
|
||||||
|
@ -43,7 +43,7 @@ RCT_EXPORT_MODULE()
|
|||||||
- (instancetype)init
|
- (instancetype)init
|
||||||
{
|
{
|
||||||
// We're only overriding this to ensure the module gets created at startup
|
// We're only overriding this to ensure the module gets created at startup
|
||||||
// TODO (D3175632): Remove once we have more declarative control over module setup.
|
// TODO (t11106126): Remove once we have more declarative control over module setup.
|
||||||
return [super init];
|
return [super init];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,10 +46,20 @@ RCT_EXPORT_MODULE()
|
|||||||
|
|
||||||
@synthesize bridge = _bridge;
|
@synthesize bridge = _bridge;
|
||||||
|
|
||||||
|
- (instancetype)init
|
||||||
|
{
|
||||||
|
// We're only overriding this to ensure the module gets created at startup
|
||||||
|
// TODO (t11106126): Remove once we have more declarative control over module setup.
|
||||||
|
return [super init];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setBridge:(RCTBridge *)bridge
|
- (void)setBridge:(RCTBridge *)bridge
|
||||||
{
|
{
|
||||||
_bridge = bridge;
|
_bridge = bridge;
|
||||||
|
|
||||||
|
// TODO: if we add an explicit "startObserving" method, we can take this out
|
||||||
|
// of the application startup path
|
||||||
|
|
||||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
[nc addObserver:self selector:@selector(applicationDidChangeStatusBarFrame:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
|
[nc addObserver:self selector:@selector(applicationDidChangeStatusBarFrame:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
|
||||||
[nc addObserver:self selector:@selector(applicationWillChangeStatusBarFrame:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil];
|
[nc addObserver:self selector:@selector(applicationWillChangeStatusBarFrame:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil];
|
||||||
|
@ -128,7 +128,7 @@ RCT_EXPORT_MODULE()
|
|||||||
- (instancetype)init
|
- (instancetype)init
|
||||||
{
|
{
|
||||||
// We're only overriding this to ensure the module gets created at startup
|
// We're only overriding this to ensure the module gets created at startup
|
||||||
// TODO (D3175632): Remove once we have more declarative control over module setup.
|
// TODO (t11106126): Remove once we have more declarative control over module setup.
|
||||||
return [super init];
|
return [super init];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user