Skip to content

Commit a8f4159

Browse files
javacheFacebook Github Bot 9
authored and
Facebook Github Bot 9
committed
Don't instantiate all native modules on invalidate
Reviewed By: majak Differential Revision: D3175599 fb-gh-sync-id: 86b60a8bd757765d35cce6248a613c8167400bd9 fbshipit-source-id: 86b60a8bd757765d35cce6248a613c8167400bd9
1 parent 0db5439 commit a8f4159

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

React/Base/RCTBatchedBridge.m

+11-4
Original file line numberDiff line numberDiff line change
@@ -590,15 +590,22 @@ - (void)invalidate
590590

591591
// Invalidate modules
592592
dispatch_group_t group = dispatch_group_create();
593-
for (RCTModuleData *moduleData in _moduleDataByName.allValues) {
594-
if (moduleData.instance == _javaScriptExecutor) {
593+
for (RCTModuleData *moduleData in _moduleDataByID) {
594+
// Be careful when grabbing an instance here, we don't want to instantiate
595+
// any modules just to invalidate them.
596+
id<RCTBridgeModule> instance = nil;
597+
if ([moduleData hasInstance]) {
598+
instance = moduleData.instance;
599+
}
600+
601+
if (instance == _javaScriptExecutor) {
595602
continue;
596603
}
597604

598-
if ([moduleData.instance respondsToSelector:@selector(invalidate)]) {
605+
if ([instance respondsToSelector:@selector(invalidate)]) {
599606
dispatch_group_enter(group);
600607
[self dispatchBlock:^{
601-
[(id<RCTInvalidating>)moduleData.instance invalidate];
608+
[(id<RCTInvalidating>)instance invalidate];
602609
dispatch_group_leave(group);
603610
} queue:moduleData.methodQueue];
604611
}

0 commit comments

Comments
 (0)