gpt4 book ai didi

ios - 为什么 UITableViewDataSource 或 UITableViewDelegate 不需要在 UITableView 中定义弱?

转载 作者:行者123 更新时间:2023-11-28 05:34:30 27 4
gpt4 key购买 nike

我会根据UITableView写自己的delegate或者dataSource,但是不知道怎么定义。在 UITableView 中:

var dataSource: UITableViewDataSource!
var delegate: UITableViewDelegate!

不需要定义'weak'吗?

最佳答案

如果您指的是使用单独的对象,您很可能不想将它们标记为弱。举个例子:

class MyViewController: UIViewController {
@IBOutlet var tableView: UITableView!
var dataSource: UITableViewDataSource
var delegate: UITableViewDelegate

init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
self.dataSource = SomeCustomDataSource();
self.delegate = SomeCustomDelegate();

super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

self.tableView.dataSource = self.dataSource;
self.tableView.delegate = self.delegate;
}
}

在这里, View Controller 对 tableView 有一个强引用。 tableView 持有对其数据源或其委托(delegate)的强引用,因此 View Controller 持有对其中每一个的强引用很重要。

委托(delegate)模式中您应该使用弱引用的地方是针对定义和使用委托(delegate)的对象。在这种情况下,它是 UITableView 本身。委托(delegate)模式中的“委托(delegate)”强烈引用它所委托(delegate)的对象是很常见的。例如,许多人制作 UITableView 所在的 View Controller 、委托(delegate)和数据源。如果 tableView 对其委托(delegate)具有强引用,则会出现循环引用—— Controller 将对 TableView 具有强引用,而 TableView 将对 Controller (其委托(delegate))具有强引用。

关于ios - 为什么 UITableViewDataSource 或 UITableViewDelegate 不需要在 UITableView 中定义弱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25028155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com