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

时间:2014-07-30 03:08:55

标签: ios uitableview swift

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

var dataSource: UITableViewDataSource!
var delegate: UITableViewDelegate!

不需要定义“弱”' ?

1 个答案:

答案 0 :(得分:2)

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

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 拥有对其dataSource或其委托的强引用,因此视图控制器必须对每个参数保持强引用。

使用弱引用的委托模式中的位置是用于定义和使用委托的对象。在这种情况下,它是UITableView本身。对于"代表"这是非常普遍的。在委托模式中有一个强引用它是委托的东西。例如,许多人制作了UITableView所在的视图控制器,它的委托和数据源。如果tableView具有对其委托的强引用,则会有一个循环引用 - 控制器将具有对表视图的强引用,并且表视图将具有对控制器(其委托)的强引用。