mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-24 04:16:00 +08:00
Fix potential retain cycles in Animated iOS
Summary: Fixes potential retain cycles detected by an internal fb tool. ``` First: __NSDictionaryM -> RCTPropsAnimatedNode -> _parentNodes -> __NSDictionaryM -> RCTStyleAnimatedNode -> _childNodes -> __NSDictionaryM Second: RCTScrollView -> _eventDispatcher -> RCTEventDispatcher -> _observers -> __NSArrayM -> RCTNativeAnimatedModule -> _nodesManager -> RCTNativeAnimatedNodesManager -> _uiManager -> RCTUIManager -> _viewRegistry -> __NSDictionaryM -> RCTScrollView ``` First fix: Use weak map for parent and child nodes, strong refs are managed by RCTNativeAnimatedNodesManager Second fix: Make RCTEventDispatcher observers a weak array and make sure we don't keep strong refs to UIManager in RCTNativeAnimatedNodesManager and RCTPropsAnimatedNode. Tested that native animations still work in UIExplorer [IOS] [BUGFIX] [NativeAnimated] - Fix potential retain cycles in Animated iOS Closes https://github.com/facebook/react-native/pull/16506 Differential Revision: D6126400 Pulled By: shergin fbshipit-source-id: 1ac5083f8ab79a806305edc23ae4796ed428f78b
This commit is contained in:
committed by
Facebook Github Bot
parent
18364e95b7
commit
c47759a9ae
@@ -16,8 +16,8 @@
|
||||
[super performUpdate];
|
||||
NSArray<NSNumber *> *inputNodes = self.config[@"input"];
|
||||
if (inputNodes.count > 1) {
|
||||
RCTValueAnimatedNode *parent1 = (RCTValueAnimatedNode *)self.parentNodes[inputNodes[0]];
|
||||
RCTValueAnimatedNode *parent2 = (RCTValueAnimatedNode *)self.parentNodes[inputNodes[1]];
|
||||
RCTValueAnimatedNode *parent1 = (RCTValueAnimatedNode *)[self.parentNodes objectForKey:inputNodes[0]];
|
||||
RCTValueAnimatedNode *parent2 = (RCTValueAnimatedNode *)[self.parentNodes objectForKey:inputNodes[1]];
|
||||
if ([parent1 isKindOfClass:[RCTValueAnimatedNode class]] &&
|
||||
[parent2 isKindOfClass:[RCTValueAnimatedNode class]]) {
|
||||
self.value = parent1.value + parent2.value;
|
||||
|
||||
Reference in New Issue
Block a user