diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.h b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.h index ae20518aacd..23c8d93365a 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.h +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.h @@ -24,13 +24,13 @@ RCT_EXTERN void RCTTurboModuleSetBindingMode(facebook::react::TurboModuleBinding */ - (Class)getModuleClassFromName:(const char *)name; -@optional - /** - * Given a module class, provide an instance for it. If not provided, default initializer is used. + * Given a module class, provide an instance for it. If nil is returned, default initializer is used. */ - (id)getModuleInstanceFromClass:(Class)moduleClass; +@optional + /** * Create an instance of a TurboModule without relying on any ObjC++ module instance. */ diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm index 9b7e0148ef2..3295a3462b4 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm @@ -478,27 +478,13 @@ static Class getFallbackClassFromName(const char *name) */ TurboModulePerfLogger::moduleCreateConstructStart(moduleName, moduleId); - if ([_delegate respondsToSelector:@selector(getModuleInstanceFromClass:)]) { - if (RCTTurboModuleManagerDelegateLockingDisabled()) { - module = [_delegate getModuleInstanceFromClass:moduleClass]; - } else { - std::lock_guard delegateGuard(_turboModuleManagerDelegateMutex); - module = [_delegate getModuleInstanceFromClass:moduleClass]; - } - - /** - * If the application is unable to create the TurboModule object from its class: - * abort TurboModule creation, and early return nil. - */ - if (!module) { - RCTLogError( - @"TurboModuleManager delegate %@ returned nil TurboModule object for module with name=\"%s\" and class=%@", - NSStringFromClass([_delegate class]), - moduleName, - NSStringFromClass(moduleClass)); - return nil; - } + if (RCTTurboModuleManagerDelegateLockingDisabled()) { + module = [_delegate getModuleInstanceFromClass:moduleClass]; } else { + std::lock_guard delegateGuard(_turboModuleManagerDelegateMutex); + module = [_delegate getModuleInstanceFromClass:moduleClass]; + } + if (!module) { module = [moduleClass new]; } TurboModulePerfLogger::moduleCreateConstructEnd(moduleName, moduleId);