/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import "RCTReloadCommand.h" #import "RCTAssert.h" #import "RCTKeyCommands.h" /** main queue only */ static NSHashTable> *listeners; void RCTRegisterReloadCommandListener(id listener) { RCTAssertMainQueue(); // because registerKeyCommandWithInput: must be called on the main thread static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ listeners = [NSHashTable weakObjectsHashTable]; [[RCTKeyCommands sharedInstance] registerKeyCommandWithInput:@"r" modifierFlags:UIKeyModifierCommand action: ^(__unused UIKeyCommand *command) { RCTTriggerReloadCommandListeners(); }]; }); [listeners addObject:listener]; } void RCTTriggerReloadCommandListeners(void) { RCTAssertMainQueue(); // Copy to protect against mutation-during-enumeration. // If listeners hasn't been initialized yet we get nil, which works just fine. NSArray> *copiedListeners = [listeners allObjects]; for (id l in copiedListeners) { [l didReceiveReloadCommand]; } }