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:
Nick Lockwood 2016-05-04 07:06:09 -07:00 committed by Facebook Github Bot 7
parent a9a90aa2f0
commit e72163f0f2
8 changed files with 44 additions and 3 deletions

View File

@ -21,6 +21,13 @@ NSString *const RCTOpenURLNotification = @"RCTOpenURLNotification";
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
{
_bridge = bridge;

View File

@ -59,10 +59,20 @@ RCT_EXPORT_MODULE()
[[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
{
_bridge = bridge;
// TODO: if we add an explicit "startObserving" method, we can take this out
// of the application startup path
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleLocalNotificationReceived:)
name:RCTLocalNotificationReceived

View File

@ -303,7 +303,7 @@ RCT_EXTERN NSArray<Class> *RCTGetModuleClasses(void);
// 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.
// 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]
if (!_javaScriptExecutor) {
id<RCTJavaScriptExecutor> executorModule = [self.executorClass new];

View File

@ -19,6 +19,13 @@ static NSDictionary *RCTParseKeyboardNotification(NSNotification *notification);
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
{
_bridge = bridge;

View File

@ -116,6 +116,13 @@ RCT_EXPORT_MODULE()
@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
{
_bridge = bridge;

View File

@ -43,7 +43,7 @@ RCT_EXPORT_MODULE()
- (instancetype)init
{
// 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];
}

View File

@ -46,10 +46,20 @@ RCT_EXPORT_MODULE()
@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
{
_bridge = bridge;
// TODO: if we add an explicit "startObserving" method, we can take this out
// of the application startup path
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(applicationDidChangeStatusBarFrame:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
[nc addObserver:self selector:@selector(applicationWillChangeStatusBarFrame:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil];

View File

@ -128,7 +128,7 @@ RCT_EXPORT_MODULE()
- (instancetype)init
{
// 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];
}