ReactNative专题

RN与swift混合开发, RCTViewManager内存释放

2021-09-14  本文已影响0人  那年那月那花儿

在reactnative和iOS混合开发过程中, 继承自RCTViewManager的原生组件, 必须实现方法:

override func view() -> UIView {

}

由于对RCTViewManager的docs没有细看, 导致出现如下代码:

lazy var testView: TestView = {
        let view = TestView()
        return view
 }()

override func view() -> UIView {
       return  testView
}

这样会导致该testView无法释放, 无论多少界面使用该testView, 加载的始终是一个view, init方法只走一次, 通过对RCTViewManager文档的了解, 表明该view不该被缓存, 始终加载的是新的view

/**
 * This method instantiates a native view to be managed by the module. Override
 * this to return a custom view instance, which may be preconfigured with default
 * properties, subviews, etc. This method will be called many times, and should
 * return a fresh instance each time. The view module MUST NOT cache the returned
 * view and return the same instance for subsequent calls.
 */
- (UIView *)view;

解决方法:

override func view() -> UIView {
       return  TestView()
}

小细节, 特此小记!!!

上一篇下一篇

猜你喜欢

热点阅读