我试图将我的 tableView 的数据源分离到一个单独的委托对象中。由于该委托需要在某些时候访问 tableview,因此我需要对委托中的委托对象的引用;并且由于两者都是类,因此我需要通过委托来避免强引用循环weak
为此,我尝试了以下代码。
class MyViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
weak var tableViewDelegate: UITableViewDataSource?
override func viewDidLoad() {
super.viewDidLoad()
tableViewDelegate = TableViewDelegate() // throwing a warning
tableView.dataSource = tableViewDelegate
}
}
当我尝试实例化委托时,Xcode 会抛出一个警告:“实例将立即被释放,因为属性‘tableViewDelegate’是‘弱’”
所以要修复它,我执行以下操作:
class MyViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
weak var tableViewDelegate: UITableViewDataSource?
override func viewDidLoad() {
super.viewDidLoad()
let delegate = TableViewDelegate() // worried this creates a strong reference.
self.tableViewDelegate = delegate
tableView.dataSource = delegate
}
}
请确认以下是否正确:通过在 viewDidLoad() 方法中初始化委托,我没有创建强引用的危险,因为一旦我们离开该方法的范围,保存该实例的变量就会被释放。或者换一种说法:我们唯一需要担心一个变量(指向一个类)创建一个强引用是变量是否在类级别初始化,因此只要类存在.
那是对的吗?