From dec80fe4866ff0179c547c0a9fd71fb97b848275 Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Tue, 15 Oct 2019 16:12:53 -0700 Subject: [PATCH] Fabric: Simplifying allocation/storing of RCTImageResponseObserverProxy Summary: We don't need to have it as `std::unique_ptr`, we can simply store it by value. Reviewed By: sammy-SC Differential Revision: D17923551 fbshipit-source-id: e8222834a8dd8f84826e4e89067610cd0a7cac73 --- .../Image/RCTImageComponentView.mm | 10 ++--- .../Slider/RCTSliderComponentView.mm | 45 +++++++++---------- React/Fabric/RCTImageResponseObserverProxy.h | 2 +- 3 files changed, 25 insertions(+), 32 deletions(-) diff --git a/React/Fabric/Mounting/ComponentViews/Image/RCTImageComponentView.mm b/React/Fabric/Mounting/ComponentViews/Image/RCTImageComponentView.mm index d88ffbf259a..a240d59d50a 100644 --- a/React/Fabric/Mounting/ComponentViews/Image/RCTImageComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/Image/RCTImageComponentView.mm @@ -25,7 +25,7 @@ UIImageView *_imageView; SharedImageLocalData _imageLocalData; ImageResponseObserverCoordinator const *_coordinator; - std::unique_ptr _imageResponseObserverProxy; + RCTImageResponseObserverProxy _imageResponseObserverProxy; } - (instancetype)initWithFrame:(CGRect)frame @@ -36,10 +36,9 @@ _imageView = [[UIImageView alloc] initWithFrame:self.bounds]; _imageView.clipsToBounds = YES; - _imageView.contentMode = (UIViewContentMode)RCTResizeModeFromImageResizeMode(defaultProps->resizeMode); - _imageResponseObserverProxy = std::make_unique(self); + _imageResponseObserverProxy = RCTImageResponseObserverProxy(self); self.contentView = _imageView; } @@ -107,11 +106,11 @@ - (void)setCoordinator:(ImageResponseObserverCoordinator const *)coordinator { if (_coordinator) { - _coordinator->removeObserver(*_imageResponseObserverProxy); + _coordinator->removeObserver(_imageResponseObserverProxy); } _coordinator = coordinator; if (_coordinator != nullptr) { - _coordinator->addObserver(*_imageResponseObserverProxy); + _coordinator->addObserver(_imageResponseObserverProxy); } } @@ -126,7 +125,6 @@ - (void)dealloc { self.coordinator = nullptr; - _imageResponseObserverProxy.reset(); } #pragma mark - RCTImageResponseDelegate diff --git a/React/Fabric/Mounting/ComponentViews/Slider/RCTSliderComponentView.mm b/React/Fabric/Mounting/ComponentViews/Slider/RCTSliderComponentView.mm index c708037c195..7be60349843 100644 --- a/React/Fabric/Mounting/ComponentViews/Slider/RCTSliderComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/Slider/RCTSliderComponentView.mm @@ -34,10 +34,10 @@ using namespace facebook::react; const ImageResponseObserverCoordinator *_maximumTrackImageCoordinator; const ImageResponseObserverCoordinator *_thumbImageCoordinator; - std::unique_ptr _trackImageResponseObserverProxy; - std::unique_ptr _minimumTrackImageResponseObserverProxy; - std::unique_ptr _maximumTrackImageResponseObserverProxy; - std::unique_ptr _thumbImageResponseObserverProxy; + RCTImageResponseObserverProxy _trackImageResponseObserverProxy; + RCTImageResponseObserverProxy _minimumTrackImageResponseObserverProxy; + RCTImageResponseObserverProxy _maximumTrackImageResponseObserverProxy; + RCTImageResponseObserverProxy _thumbImageResponseObserverProxy; } - (instancetype)initWithFrame:(CGRect)frame @@ -55,10 +55,10 @@ using namespace facebook::react; _sliderView.value = defaultProps->value; - _trackImageResponseObserverProxy = std::make_unique(self); - _minimumTrackImageResponseObserverProxy = std::make_unique(self); - _maximumTrackImageResponseObserverProxy = std::make_unique(self); - _thumbImageResponseObserverProxy = std::make_unique(self); + _trackImageResponseObserverProxy = RCTImageResponseObserverProxy(self); + _minimumTrackImageResponseObserverProxy = RCTImageResponseObserverProxy(self); + _maximumTrackImageResponseObserverProxy = RCTImageResponseObserverProxy(self); + _thumbImageResponseObserverProxy = RCTImageResponseObserverProxy(self); self.contentView = _sliderView; } @@ -97,11 +97,6 @@ using namespace facebook::react; self.minimumTrackImageCoordinator = nullptr; self.maximumTrackImageCoordinator = nullptr; self.thumbImageCoordinator = nullptr; - - _trackImageResponseObserverProxy.reset(); - _minimumTrackImageResponseObserverProxy.reset(); - _maximumTrackImageResponseObserverProxy.reset(); - _thumbImageResponseObserverProxy.reset(); } #pragma mark - RCTComponentViewProtocol @@ -181,44 +176,44 @@ using namespace facebook::react; - (void)setTrackImageCoordinator:(const ImageResponseObserverCoordinator *)coordinator { if (_trackImageCoordinator) { - _trackImageCoordinator->removeObserver(*_trackImageResponseObserverProxy); + _trackImageCoordinator->removeObserver(_trackImageResponseObserverProxy); } _trackImageCoordinator = coordinator; if (_trackImageCoordinator) { - _trackImageCoordinator->addObserver(*_trackImageResponseObserverProxy); + _trackImageCoordinator->addObserver(_trackImageResponseObserverProxy); } } - (void)setMinimumTrackImageCoordinator:(const ImageResponseObserverCoordinator *)coordinator { if (_minimumTrackImageCoordinator) { - _minimumTrackImageCoordinator->removeObserver(*_minimumTrackImageResponseObserverProxy); + _minimumTrackImageCoordinator->removeObserver(_minimumTrackImageResponseObserverProxy); } _minimumTrackImageCoordinator = coordinator; if (_minimumTrackImageCoordinator) { - _minimumTrackImageCoordinator->addObserver(*_minimumTrackImageResponseObserverProxy); + _minimumTrackImageCoordinator->addObserver(_minimumTrackImageResponseObserverProxy); } } - (void)setMaximumTrackImageCoordinator:(const ImageResponseObserverCoordinator *)coordinator { if (_maximumTrackImageCoordinator) { - _maximumTrackImageCoordinator->removeObserver(*_maximumTrackImageResponseObserverProxy); + _maximumTrackImageCoordinator->removeObserver(_maximumTrackImageResponseObserverProxy); } _maximumTrackImageCoordinator = coordinator; if (_maximumTrackImageCoordinator) { - _maximumTrackImageCoordinator->addObserver(*_maximumTrackImageResponseObserverProxy); + _maximumTrackImageCoordinator->addObserver(_maximumTrackImageResponseObserverProxy); } } - (void)setThumbImageCoordinator:(const ImageResponseObserverCoordinator *)coordinator { if (_thumbImageCoordinator) { - _thumbImageCoordinator->removeObserver(*_thumbImageResponseObserverProxy); + _thumbImageCoordinator->removeObserver(_thumbImageResponseObserverProxy); } _thumbImageCoordinator = coordinator; if (_thumbImageCoordinator) { - _thumbImageCoordinator->addObserver(*_thumbImageResponseObserverProxy); + _thumbImageCoordinator->addObserver(_thumbImageResponseObserverProxy); } } @@ -318,13 +313,13 @@ using namespace facebook::react; - (void)didReceiveImage:(UIImage *)image fromObserver:(void const *)observer { - if (observer == _trackImageResponseObserverProxy.get()) { + if (observer == &_trackImageResponseObserverProxy) { self.trackImage = image; - } else if (observer == _minimumTrackImageResponseObserverProxy.get()) { + } else if (observer == &_minimumTrackImageResponseObserverProxy) { self.minimumTrackImage = image; - } else if (observer == _maximumTrackImageResponseObserverProxy.get()) { + } else if (observer == &_maximumTrackImageResponseObserverProxy) { self.maximumTrackImage = image; - } else if (observer == _thumbImageResponseObserverProxy.get()) { + } else if (observer == &_thumbImageResponseObserverProxy) { self.thumbImage = image; } } diff --git a/React/Fabric/RCTImageResponseObserverProxy.h b/React/Fabric/RCTImageResponseObserverProxy.h index 63de2b783ac..bd54a86079e 100644 --- a/React/Fabric/RCTImageResponseObserverProxy.h +++ b/React/Fabric/RCTImageResponseObserverProxy.h @@ -18,7 +18,7 @@ namespace react { class RCTImageResponseObserverProxy final : public ImageResponseObserver { public: - RCTImageResponseObserverProxy(id delegate); + RCTImageResponseObserverProxy(id delegate = nil); void didReceiveImage(ImageResponse const &imageResponse) const override; void didReceiveProgress(float progress) const override;