diff --git a/React/Fabric/RCTSurfaceTouchHandler.h b/React/Fabric/RCTSurfaceTouchHandler.h index 1c642be78f5..b20e195322a 100644 --- a/React/Fabric/RCTSurfaceTouchHandler.h +++ b/React/Fabric/RCTSurfaceTouchHandler.h @@ -11,6 +11,10 @@ NS_ASSUME_NONNULL_BEGIN @interface RCTSurfaceTouchHandler : UIGestureRecognizer +/* + * Attaches (and detaches) a view to the touch handler. + * The receiver does not retain the provided view. + */ - (void)attachToView:(UIView *)view; - (void)detachFromView:(UIView *)view; diff --git a/React/Fabric/RCTSurfaceTouchHandler.mm b/React/Fabric/RCTSurfaceTouchHandler.mm index c3edd4eed62..387908ccf6d 100644 --- a/React/Fabric/RCTSurfaceTouchHandler.mm +++ b/React/Fabric/RCTSurfaceTouchHandler.mm @@ -159,7 +159,10 @@ struct PointerHasher { std::unordered_map<__unsafe_unretained UITouch *, ActiveTouch, PointerHasher<__unsafe_unretained UITouch *>> _activeTouches; - UIView *_rootComponentView; + /* + * We hold the view weakly to prevent a retain cycle. + */ + __weak UIView *_rootComponentView; IdentifierPool<11> _identifierPool; } diff --git a/React/Fabric/Surface/RCTFabricSurface.mm b/React/Fabric/Surface/RCTFabricSurface.mm index 728bdcf0f8e..9d73a3d3caa 100644 --- a/React/Fabric/Surface/RCTFabricSurface.mm +++ b/React/Fabric/Surface/RCTFabricSurface.mm @@ -83,7 +83,6 @@ using namespace facebook::react; } [_surfacePresenter unregisterSurface:self]; - [_touchHandler detachFromView:_view]; return YES; }