From b51b579ff00067231fb1d0754e1a86692f44bc50 Mon Sep 17 00:00:00 2001 From: Varuzh1 <163114709+Varuzh1@users.noreply.github.com> Date: Wed, 18 Jun 2025 10:12:21 +0400 Subject: [PATCH] fix(ios): retain cycle and memory leak involving the RCTVideo instance when using Google IMA ads in react-native-video. (#4574) Co-authored-by: Varuzhan Khachatryan --- ios/Video/Features/RCTIMAAdsManager.swift | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ios/Video/Features/RCTIMAAdsManager.swift b/ios/Video/Features/RCTIMAAdsManager.swift index 845c373a..cf7a56f8 100644 --- a/ios/Video/Features/RCTIMAAdsManager.swift +++ b/ios/Video/Features/RCTIMAAdsManager.swift @@ -30,8 +30,13 @@ func requestAds() { guard let _video else { return } + // fixes RCTVideo --> RCTIMAAdsManager --> IMAAdsLoader --> IMAAdDisplayContainer --> RCTVideo memory leak. + let adContainerView = UIView(frame: _video.bounds) + adContainerView.backgroundColor = .clear + _video.addSubview(adContainerView) + // Create ad display container for ad rendering. - let adDisplayContainer = IMAAdDisplayContainer(adContainer: _video, viewController: _video.reactViewController()) + let adDisplayContainer = IMAAdDisplayContainer(adContainer: adContainerView, viewController: _video.reactViewController()) let adTagUrl = _video.getAdTagUrl() let contentPlayhead = _video.getContentPlayhead()