Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么不';UITableViewDataSource或UITableViewDelegate是否需要在UITableView中定义弱?_Ios_Uitableview_Swift - Fatal编程技术网

Ios 为什么不';UITableViewDataSource或UITableViewDelegate是否需要在UITableView中定义弱?

Ios 为什么不';UITableViewDataSource或UITableViewDelegate是否需要在UITableView中定义弱?,ios,uitableview,swift,Ios,Uitableview,Swift,我将根据UITableView编写自己的委托或数据源,但我不知道如何定义它。 在UITableView中: var dataSource: UITableViewDataSource! var delegate: UITableViewDelegate! 不需要为“弱”定义吗?如果您指的是使用单独的对象,您很可能不希望将它们标记为弱。举个例子: class MyViewController: UIViewController { @IBOutlet var tableView: UIT

我将根据UITableView编写自己的委托或数据源,但我不知道如何定义它。 在UITableView中:

var dataSource: UITableViewDataSource!
var delegate: UITableViewDelegate!

不需要为“弱”定义吗?

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

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;
    }
}
在这里,视图控制器对tableView有很强的引用。tableView不包含对其数据源或其委托的强引用,因此视图控制器必须包含对每个数据源或委托的强引用


在委托模式中,应该使用弱引用的位置是定义和使用委托的对象。在本例中,它是UITableView本身。委托模式中的“委托”通常对委托对象具有强引用。例如,许多人将UITableView所在的视图控制器、它的委托和数据源设置为。如果tableView对其委托具有强引用,则将存在循环引用–控制器对table view具有强引用,而table view对控制器(其委托)具有强引用。

为什么将它们声明为强制展开选项?