diff --git a/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm index d0297c694d3..3789b003efe 100644 --- a/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm @@ -53,8 +53,9 @@ using namespace facebook::react; _containerView = [[UIView alloc] initWithFrame:CGRectZero]; [_scrollView addSubview:_containerView]; + __weak __typeof(self) weakSelf = self; _scrollViewDelegateSplitter = [[RNGenericDelegateSplitter alloc] initWithDelegateUpdateBlock:^(id delegate) { - self->_scrollView.delegate = delegate; + weakSelf.scrollView.delegate = delegate; }]; [_scrollViewDelegateSplitter addDelegate:self]; diff --git a/React/Fabric/Utils/RNGenericDelegateSplitter.mm b/React/Fabric/Utils/RNGenericDelegateSplitter.mm index 0add6b72b66..44b604838b3 100644 --- a/React/Fabric/Utils/RNGenericDelegateSplitter.mm +++ b/React/Fabric/Utils/RNGenericDelegateSplitter.mm @@ -8,7 +8,7 @@ #import "RNGenericDelegateSplitter.h" @implementation RNGenericDelegateSplitter { - NSMutableArray *_delegates; + NSHashTable *_delegates; } #pragma mark - Public @@ -17,7 +17,7 @@ { if (self = [super init]) { _delegateUpdateBlock = block; - _delegates = [NSMutableArray new]; + _delegates = [NSHashTable weakObjectsHashTable]; } return self; @@ -44,7 +44,7 @@ return; } - _delegateUpdateBlock(_delegates.count == 1 ? _delegates.firstObject : self); + _delegateUpdateBlock(_delegates.count == 1 ? [_delegates allObjects].firstObject : self); } #pragma mark - Fast Forwarding