【发布时间】:2019-08-14 22:05:22
【问题描述】:
所以考虑这种情况,我有一个 UIViewController,其中包含一个简单的 UICollectionView,但 Delegate & DataSource 协议与 NSObject 与 UIViewController 是分开的。
看起来像这样
class MainCollctionViewDelegate: NSObject, UICollectionViewDelegate
class MainCollectionViewDataSrouce: NSObject, UICollectionViewDataSource
我在我的UIViewController 中使用它们,就像这样,
lazy var CVDelegate = MainCollctionViewDelegate()
lazy var CVDataSource = MainCollectionViewDataSrouce()
//MARK: - Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
collectionView.registerCell(PlainCell.self) // register custom cell Nib into collection View.
collectionView.delegate = CVDelegate //Set Deleagte
collectionView.dataSource = CVDataSource // Set data Source
}
这种方法将来会导致任何内存泄漏吗?考虑到我将实施注入来填充CollectionView 的数据源,将来会是这样的。
MainCollectionViewDataSrouce(with: Foo) // Foo is some data to populate the collection with.
对此有更好的做法吗?考虑到我正在努力实现 最少的代码编写(冗余)。
注意:这也适用于
UITableViewDelegate&UITableViewDataSource
【问题讨论】:
-
我已经在仪器中测试过,仍然没有问题,但测试只在一个 UIViewController 上,我需要最终的测试用例,或者如果有人之前已经使用过这种方法可以建议
-
我最近也在做同样的事情。我认为这不会产生任何内存泄漏,只需关注分析器/图表即可。但是,如果您只使用一次,那么绝对不需要这种架构。
-
@MauricioChirino 我同意,我正在考虑这个未来,因为我可能会多次使用它,如图所示,我最终会用数据注入数据源,所以我可以在我的应用程序中使用它非常快,没有一遍又一遍地写入相同数据源的开销。
-
@MauricioChirino 也想象用这种方法进行单元测试,我认为可能真的很好
-
"这种方法将来会导致内存泄漏吗?"默认情况下不会,除非你做了导致保留周期的事情。
标签: ios swift memory-management