From a8f4159fc76420a536ad3d98e737744fa7a04f72 Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Wed, 13 Apr 2016 18:26:56 -0700 Subject: [PATCH] Don't instantiate all native modules on invalidate Reviewed By: majak Differential Revision: D3175599 fb-gh-sync-id: 86b60a8bd757765d35cce6248a613c8167400bd9 fbshipit-source-id: 86b60a8bd757765d35cce6248a613c8167400bd9 --- React/Base/RCTBatchedBridge.m | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/React/Base/RCTBatchedBridge.m b/React/Base/RCTBatchedBridge.m index 97204a2f4b..caeb856cba 100644 --- a/React/Base/RCTBatchedBridge.m +++ b/React/Base/RCTBatchedBridge.m @@ -590,15 +590,22 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithBundleURL:(__unused NSURL *)bundleUR // Invalidate modules dispatch_group_t group = dispatch_group_create(); - for (RCTModuleData *moduleData in _moduleDataByName.allValues) { - if (moduleData.instance == _javaScriptExecutor) { + for (RCTModuleData *moduleData in _moduleDataByID) { + // Be careful when grabbing an instance here, we don't want to instantiate + // any modules just to invalidate them. + id instance = nil; + if ([moduleData hasInstance]) { + instance = moduleData.instance; + } + + if (instance == _javaScriptExecutor) { continue; } - if ([moduleData.instance respondsToSelector:@selector(invalidate)]) { + if ([instance respondsToSelector:@selector(invalidate)]) { dispatch_group_enter(group); [self dispatchBlock:^{ - [(id)moduleData.instance invalidate]; + [(id)instance invalidate]; dispatch_group_leave(group); } queue:moduleData.methodQueue]; }