React Native iOS中NativeModule的初始

2019-03-08  本文已影响0人  xinguoshui

初始化一个module需要调用RCT_EXPORT_MODULE。

#define RCT_EXPORT_MODULE(js_name) \
RCT_EXTERN void RCTRegisterModule(Class); \  
+ (NSString *)moduleName { return @#js_name; } \
+ (void)load { RCTRegisterModule(self); }

ObjectC中一个文件的引用会先调用load方法,所以这里会先调用RCTRegisterModule(self), RCTRegisterModule的实现在RCTBridge.m中。

/**
 * Register the given class as a bridge module. All modules must be registered
 * prior to the first bridge initialization.
 */
void RCTRegisterModule(Class);  
void RCTRegisterModule(Class moduleClass)  
{
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    RCTModuleClasses = [NSMutableArray new];
  });

  RCTAssert([moduleClass conformsToProtocol:@protocol(RCTBridgeModule)],
            @"%@ does not conform to the RCTBridgeModule protocol",
            moduleClass);

  // Register module
  [RCTModuleClasses addObject:moduleClass];
}

上一篇下一篇

猜你喜欢

热点阅读