/** * Copyright (c) 2015-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import "RCTComponentViewRegistry.h" #import #import @implementation RCTComponentViewRegistry { NSMapTable *> *_registry; } - (instancetype)init { if (self = [super init]) { _registry = [NSMapTable mapTableWithKeyOptions:NSPointerFunctionsIntegerPersonality | NSPointerFunctionsOpaqueMemory valueOptions:NSPointerFunctionsObjectPersonality]; } return self; } - (UIView *)dequeueComponentViewWithName:(NSString *)componentName tag:(ReactTag)tag { RCTAssertMainQueue(); // This is temporary approach. NSString *className = [NSString stringWithFormat:@"RCT%@ComponentView", componentName]; UIView *componentView = [[NSClassFromString(className) alloc] init]; componentView.tag = tag; [_registry setObject:componentView forKey:(__bridge id)(void *)tag]; return componentView; } - (void)enqueueComponentViewWithName:(NSString *)componentName tag:(ReactTag)tag componentView:(UIView *)componentView { RCTAssertMainQueue(); [_registry removeObjectForKey:(__bridge id)(void *)tag]; } - (UIView *)componentViewByTag:(ReactTag)tag { RCTAssertMainQueue(); return [_registry objectForKey:(__bridge id)(void *)tag]; } - (ReactTag)tagByComponentView:(UIView *)componentView { RCTAssertMainQueue(); return componentView.tag; } @end