|
35 | 35 | BOOL isSync; |
36 | 36 | } RCTMethodInfo; |
37 | 37 |
|
38 | | -@implementation ReactBridgeUtils |
39 | | - |
40 | | -+ (void)load { |
41 | | - SEL selector = @selector(_registerModule); |
42 | | - |
43 | | - int numClasses = objc_getClassList(NULL, 0); |
44 | | - Class* classes = (Class *)malloc(sizeof(Class) * numClasses); |
45 | | - numClasses = objc_getClassList(classes, numClasses); |
46 | | - |
47 | | - for (int i = 0; i < numClasses; i++) { |
48 | | - Class class = classes[i]; |
49 | | - |
50 | | - unsigned int numMethods = 0; |
51 | | - Method *methods = class_copyMethodList(object_getClass(class), &numMethods); |
52 | | - for (int j = 0; j < numMethods; j++) { |
53 | | - Method method = methods[j]; |
54 | | - if (sel_isEqual(method_getName(method), selector)) { |
55 | | - IMP imp = method_getImplementation(method); |
56 | | - ((void (*)(Class, SEL))imp)(class, selector); |
57 | | - continue; |
58 | | - } |
| 38 | +static void class_performClassSelector(Class class, SEL selector) { |
| 39 | + unsigned int numMethods = 0; |
| 40 | + Method *methods = class_copyMethodList(object_getClass(class), &numMethods); |
| 41 | + for (int i = 0; i < numMethods; i++) { |
| 42 | + Method method = methods[i]; |
| 43 | + if (sel_isEqual(method_getName(method), selector)) { |
| 44 | + IMP imp = method_getImplementation(method); |
| 45 | + ((void (*)(Class, SEL))imp)(class, selector); |
| 46 | + break; |
59 | 47 | } |
60 | | - free(methods); |
61 | 48 | } |
62 | | - free(classes); |
| 49 | + free(methods); |
63 | 50 | } |
64 | 51 |
|
| 52 | +__attribute__((constructor)) |
| 53 | +static void load() { |
| 54 | + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ |
| 55 | + SEL selector = @selector(_registerModule); |
| 56 | + int numClasses = objc_getClassList(NULL, 0); |
| 57 | + Class* classes = (Class *)malloc(sizeof(Class) * numClasses); |
| 58 | + numClasses = objc_getClassList(classes, numClasses); |
| 59 | + for (int i = 0; i < numClasses; i++) { |
| 60 | + Class class = classes[i]; |
| 61 | + class_performClassSelector(class, selector); |
| 62 | + } |
| 63 | + free(classes); |
| 64 | + }); |
| 65 | +} |
| 66 | + |
| 67 | +@implementation ReactBridgeUtils |
| 68 | + |
65 | 69 | + (const void *)methodInfo:(NSString *)jsName objcName:(NSString *)objcName isSync:(BOOL)isSync { |
66 | 70 | RCTMethodInfo* methodInfo = malloc(sizeof(RCTMethodInfo)); |
67 | 71 | methodInfo->jsName = strdup([jsName cStringUsingEncoding: NSUTF8StringEncoding]); |
|
0 commit comments