我会根据UITableView编写自己的委托或dataSource,但我不知道如何定义它。 在UITableView中:
var dataSource: UITableViewDataSource!
var delegate: UITableViewDelegate!
不需要定义“弱”' ?
答案 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具有对其委托的强引用,则会有一个循环引用 - 控制器将具有对表视图的强引用,并且表视图将具有对控制器(其委托)的强引用。