考虑这种情况,我有一个 UIViewController
,它包含一个简单的 UICollectionView
,但是 Delegate & DataSource
协议(protocol)是分开的 来自
。 UIViewController
的 NSObject
看起来像这样
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
}
这种方法将来会导致任何内存泄漏吗?考虑到我将实现注入(inject)以填充 CollectionView
的数据源,以便将来成为这样的东西。
MainCollectionViewDataSrouce(with: Foo) // Foo is some data to populate the collection with.
对此有更好的做法吗?考虑到我正在努力实现 最少的代码编写(冗余)。
Note: this also applies for
UITableViewDelegate
&UITableViewDataSource
最佳答案
这种方法将来会导致任何内存泄漏吗?
所以这里没有内存循环,也没有内存泄漏的理由。
重要。如果您在 viewController 上添加来自 DataSource/Delegate 的引用,请确保它是弱引用,否则您将创建内存循环。
注意。您可以在 collectionView 上添加来自 DataSource/Delegate 的强引用,因为 collectionView 对 dataSource 和 delegate 有弱引用。所以也没有循环
旁注
最好在数据源中注册单元格,因为“只有”数据源知道将使用什么类型的单元格。
关于ios - 自定义委托(delegate)和数据源 NSObject 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55324689/