react-native/React/Views
Nick Lockwood 060664fd3d Refactored module access to allow for lazy loading
Summary: public

The `bridge.modules` dictionary provides access to all native modules, but this API requires that every module is initialized in advance so that any module can be accessed.

This diff introduces a better API that will allow modules to be initialized lazily as they are needed, and deprecates `bridge.modules` (modules that use it will still work, but should be rewritten to use `bridge.moduleClasses` or `-[bridge moduleForName/Class:` instead.

The rules are now as follows:

* Any module that overrides `init` or `setBridge:` will be initialized on the main thread when the bridge is created
* Any module that implements `constantsToExport:` will be initialized later when the config is exported (the module itself will be initialized on a background queue, but  `constantsToExport:` will still be called on the main thread.
* All other modules will be initialized lazily when a method is first called on them.

These rules may seem slightly arcane, but they have the advantage of not violating any assumptions that may have been made by existing code - any module written under the original assumption that it would be initialized synchronously on the main thread when the bridge is created should still function exactly the same, but modules that avoid overriding `init` or `setBridge:` will now be loaded lazily.

I've rewritten most of the standard modules to take advantage of this new lazy loading, with the following results:

Out of the 65 modules included in UIExplorer:

* 16 are initialized on the main thread when the bridge is created
* A further 8 are initialized when the config is exported to JS
* The remaining 41 will be initialized lazily on-demand

Reviewed By: jspahrsummers

Differential Revision: D2677695

fb-gh-sync-id: 507ae7e9fd6b563e89292c7371767c978e928f33
2015-11-25 04:49:45 -08:00
..
RCTActivityIndicatorViewManager.h Improved RCTActivityIndicatorView and fixed some flow errors 2015-04-26 02:17:13 -08:00
RCTActivityIndicatorViewManager.m Convert alloc/init to new to please linter 2015-08-17 08:46:00 -07:00
RCTAnimationType.h [LayoutAnimation] RCTAnimationTypeKeyboard 2015-06-25 09:17:01 -08:00
RCTAutoInsetsProtocol.h Automatically adjust content inset after view controller did layout subviews 2015-09-04 07:00:21 -08:00
RCTBorderDrawing.h Implemented fast path for same borders/radii 2015-05-28 09:16:44 -08:00
RCTBorderDrawing.m Implemented fast path for same borders/radii 2015-05-28 09:16:44 -08:00
RCTComponent.h Added lightweight generic annotations 2015-11-03 14:49:30 -08:00
RCTComponentData.h Refactored module access to allow for lazy loading 2015-11-25 04:49:45 -08:00
RCTComponentData.m Refactored module access to allow for lazy loading 2015-11-25 04:49:45 -08:00
RCTConvert+CoreLocation.h [MapView] Support for annotation callouts, annotation press, callout presses and pin animation 2015-06-25 09:15:21 -08:00
RCTConvert+CoreLocation.m [MapView] Support for annotation callouts, annotation press, callout presses and pin animation 2015-06-25 09:15:21 -08:00
RCTConvert+MapKit.h [MapView] Support for annotation callouts, annotation press, callout presses and pin animation 2015-06-25 09:15:21 -08:00
RCTConvert+MapKit.m Convert alloc/init to new to please linter 2015-08-17 08:46:00 -07:00
RCTDatePicker.h Added mechanism for directly mapping JS event handlers to blocks 2015-09-02 06:11:24 -08:00
RCTDatePicker.m Added mechanism for directly mapping JS event handlers to blocks 2015-09-02 06:11:24 -08:00
RCTDatePickerManager.h Removed deprecated RCT_EXPORT + code paths 2015-06-05 09:58:25 -08:00
RCTDatePickerManager.m Replaced RCTSparseArray with NSDictionary 2015-11-14 10:28:28 -08:00
RCTImageComponent.h Implemented inline image support for <Text> 2015-10-08 11:56:25 -07:00
RCTMap.h Added lightweight generic annotations 2015-11-03 14:49:30 -08:00
RCTMap.m Added lightweight generic annotations 2015-11-03 14:49:30 -08:00
RCTMapManager.h [ReactNative] s/ReactKit/React/g 2015-03-26 02:42:24 -08:00
RCTMapManager.m Add showsCompass to MapView props 2015-11-19 02:22:29 -08:00
RCTModalHostView.h Enable transparent modal presentation with <Modal /> 2015-08-14 04:47:12 -08:00
RCTModalHostView.m Return viewsWithNewFrame instead of passing it around 2015-11-17 06:37:31 -08:00
RCTModalHostViewController.h Add <Modal /> component 2015-07-28 07:21:50 -08:00
RCTModalHostViewController.m Refactored module access to allow for lazy loading 2015-11-25 04:49:45 -08:00
RCTModalHostViewManager.h Enable transparent modal presentation with <Modal /> 2015-08-14 04:47:12 -08:00
RCTModalHostViewManager.m Refactored module access to allow for lazy loading 2015-11-25 04:49:45 -08:00
RCTNavItem.h Added mechanism for directly mapping JS event handlers to blocks 2015-09-02 06:11:24 -08:00
RCTNavItem.m Added mechanism for directly mapping JS event handlers to blocks 2015-09-02 06:11:24 -08:00
RCTNavItemManager.h [ReactNative] s/ReactKit/React/g 2015-03-26 02:42:24 -08:00
RCTNavItemManager.m Added mechanism for directly mapping JS event handlers to blocks 2015-09-02 06:11:24 -08:00
RCTNavigator.h Remove isValid from RCTInvalidating 2015-08-14 01:57:18 -08:00
RCTNavigator.m Added lightweight generic annotations 2015-11-03 14:49:30 -08:00
RCTNavigatorManager.h [ReactNative] s/ReactKit/React/g 2015-03-26 02:42:24 -08:00
RCTNavigatorManager.m Replaced RCTSparseArray with NSDictionary 2015-11-14 10:28:28 -08:00
RCTPicker.h Added lightweight generic annotations 2015-11-03 14:49:30 -08:00
RCTPicker.m Added lightweight generic annotations 2015-11-03 14:49:30 -08:00
RCTPickerManager.h [ReactNative] s/ReactKit/React/g 2015-03-26 02:42:24 -08:00
RCTPickerManager.m Replaced RCTSparseArray with NSDictionary 2015-11-14 10:28:28 -08:00
RCTPointAnnotation.h Open sourced RCTPasteboard 2015-11-17 15:20:32 -08:00
RCTPointAnnotation.m Open sourced RCTPasteboard 2015-11-17 15:20:32 -08:00
RCTPointerEvents.h [ReactNative] s/ReactKit/React/g 2015-03-26 02:42:24 -08:00
RCTProgressViewManager.h Added ProgressViewIOS 2015-06-03 09:49:35 -08:00
RCTProgressViewManager.m Replaced RCTSparseArray with NSDictionary 2015-11-14 10:28:28 -08:00
RCTScrollView.h UIRefreshControl added to scroll view 2015-11-19 11:15:48 -08:00
RCTScrollView.m Remove scrollview support from UIManager, remove mainScrollView(delegate) 2015-11-25 04:12:34 -08:00
RCTScrollViewManager.h Remove scrollview support from UIManager, remove mainScrollView(delegate) 2015-11-25 04:12:34 -08:00
RCTScrollViewManager.m Remove scrollview support from UIManager, remove mainScrollView(delegate) 2015-11-25 04:12:34 -08:00
RCTScrollableProtocol.h Remove scrollview support from UIManager, remove mainScrollView(delegate) 2015-11-25 04:12:34 -08:00
RCTSegmentedControl.h Added lightweight generic annotations 2015-11-03 14:49:30 -08:00
RCTSegmentedControl.m Added lightweight generic annotations 2015-11-03 14:49:30 -08:00
RCTSegmentedControlManager.h Add SegmentedControlIOS 2015-04-29 08:08:45 -08:00
RCTSegmentedControlManager.m Replaced RCTSparseArray with NSDictionary 2015-11-14 10:28:28 -08:00
RCTShadowView.h enable the minWidth/maxWidth/minHeight/maxHeight features 2015-11-17 10:58:32 -08:00
RCTShadowView.m enable the minWidth/maxWidth/minHeight/maxHeight features 2015-11-17 10:58:32 -08:00
RCTSlider.h added method to set thumb image 2015-11-24 16:10:04 -08:00
RCTSlider.m added method to set thumb image 2015-11-24 16:10:04 -08:00
RCTSliderManager.h [ReactNative] s/ReactKit/React/g 2015-03-26 02:42:24 -08:00
RCTSliderManager.m added method to set thumb image 2015-11-24 16:10:04 -08:00
RCTSwitch.h Added mechanism for directly mapping JS event handlers to blocks 2015-09-02 06:11:24 -08:00
RCTSwitch.m [ReactNative] s/ReactKit/React/g 2015-03-26 02:42:24 -08:00
RCTSwitchManager.h [ReactNative] s/ReactKit/React/g 2015-03-26 02:42:24 -08:00
RCTSwitchManager.m Added mechanism for directly mapping JS event handlers to blocks 2015-09-02 06:11:24 -08:00
RCTTabBar.h Added mechanism for directly mapping JS event handlers to blocks 2015-09-02 06:11:24 -08:00
RCTTabBar.m fix the memory leaks caused by RCTTabBar 2015-11-05 09:39:30 -08:00
RCTTabBarItem.h Added mechanism for directly mapping JS event handlers to blocks 2015-09-02 06:11:24 -08:00
RCTTabBarItem.m Allow nil tabbar item icon 2015-10-06 10:29:01 -07:00
RCTTabBarItemManager.h [ReactNative] s/ReactKit/React/g 2015-03-26 02:42:24 -08:00
RCTTabBarItemManager.m Added mechanism for directly mapping JS event handlers to blocks 2015-09-02 06:11:24 -08:00
RCTTabBarManager.h [ReactNative] s/ReactKit/React/g 2015-03-26 02:42:24 -08:00
RCTTabBarManager.m Added mechanism for directly mapping JS event handlers to blocks 2015-09-02 06:11:24 -08:00
RCTTextDecorationLineType.h <Text> module add textDecoration style attributes 2015-07-07 06:15:20 -08:00
RCTView.h Added mechanism for directly mapping JS event handlers to blocks 2015-09-02 06:11:24 -08:00
RCTView.m Replaced RCTSparseArray with NSDictionary 2015-11-14 10:28:28 -08:00
RCTViewControllerProtocol.h [ReactNative] s/ReactKit/React/g 2015-03-26 02:42:24 -08:00
RCTViewManager.h Refactored module access to allow for lazy loading 2015-11-25 04:49:45 -08:00
RCTViewManager.m Refactored module access to allow for lazy loading 2015-11-25 04:49:45 -08:00
RCTWebView.h Replaced RCTSparseArray with NSDictionary 2015-11-14 10:28:28 -08:00
RCTWebView.m Replaced RCTSparseArray with NSDictionary 2015-11-14 10:28:28 -08:00
RCTWebViewManager.h [ReactNative] s/ReactKit/React/g 2015-03-26 02:42:24 -08:00
RCTWebViewManager.m add allowsInlineMediaPlayback prop to play inline html5 video 2015-11-19 07:11:29 -08:00
RCTWrapperViewController.h Added mechanism for directly mapping JS event handlers to blocks 2015-09-02 06:11:24 -08:00
RCTWrapperViewController.m Automatically adjust content inset after view controller did layout subviews 2015-09-04 07:00:21 -08:00
UIView+Private.h Perform clip update on RCTScrollView in increments of 50 pt 2015-08-13 07:56:41 -08:00
UIView+React.h Replaced RCTSparseArray with NSDictionary 2015-11-14 10:28:28 -08:00
UIView+React.m Replaced RCTSparseArray with NSDictionary 2015-11-14 10:28:28 -08:00