flutter_boost
flutter_boost copied to clipboard
[Bug]:iOS 容器内存泄露 FlutterSDK-3.10.6 FlutterBoost-4.4.0
请描述遇到的问题,以及您所期望的正确的结果
问题: 1.使用 FlutterBoost提供的 Demo 工程,在首页 Push 一个 Flutter 容器页面; 2.在 Flutter 容器页面,返回到上一级首页页面,容器 FBFlutterViewContainer 的 dealloc 没调用,内存泄露; 3.再次点击 push Flutter 容器之后,FBFlutterViewContainer 的 dealloc 才被调用; 4.再次从 FBFlutterViewContainer 返回上一级页面,dealloc 没调用,内存泄露;
期望:
- 容器 FBFlutterViewContainer 的 dealloc 正常调用,内存释放;
请说明如何操作会遇到上述问题
1.使用 FlutterBoost提供的 Demo 工程,在首页 Push 一个 Flutter 容器页面; 2.在 Flutter 容器页面,返回到上一级首页页面,容器 FBFlutterViewContainer 的 dealloc 没调用,内存泄露; 3.再次点击 push Flutter 容器之后,FBFlutterViewContainer 的 dealloc 才被调用; 4.再次从 FBFlutterViewContainer 返回上一级页面,dealloc 没调用,内存泄露;
在下面填入关键复现代码
- (void)dealloc { if (self.removeEventCallback != nil) { self.removeEventCallback(); } [NSNotificationCenter.defaultCenter removeObserver:self]; _leftEdgeGesture.delegate = nil; } 以上方法,在 Flutter 容器页面退出时,没有被调用。
复现的平台
iOS
Flutter SDK版本
3.10.6
FlutterBoost版本
4.4.0
是否延迟初始化FlutterBoost
No
解决方案
1.在 3.7.0 ~ 3.7.12 的版本,在 FlutterViewController 容器页面退出时,dealloc 会调用,正常释放; 2.猜测和 impller 的引擎有关系; 3.没具体是探究,待后面有时间探究一下;
请这看看这个问题,比较严重。不敢在线上使用了
把flutter切回去是没有泄漏,但是退出页面后内存也没有减少多少
我也遇到这个问题了
用一个原生的VC装一下Container,然后在VC的dealloc中,remove Container
` public lazy var flutterVC: FBFlutterViewContainer = { let container = FBFlutterViewContainer() return container! }()
func setupUI() {
addChild(flutterVC)
view.addSubview(flutterVC.view)
flutterVC.view.frame = view.bounds
}
public func configFlutter(name: String, uniqueId: String?, params: [AnyHashable : Any]?, opaque: Bool) {
flutterVC.setName(name, uniqueId: uniqueId, params: params, opaque: opaque)
}
deinit { NotificationCenter.default.removeObserver(self) flutterVC.removeFromParent() } `
问题是返回没有释放内存,重新点击进去之后释放内存,如果内存一直不释放,那么就会不断增加,可能原因: 容器中增加addEventListener,但是这个目前不能手动释放,导致容器不会走 -(void)dealloc { if (self.removeEventCallback != nil) { self.removeEventCallback(); } [NSNotificationCenter.defaultCenter removeObserver:self]; }