为什么应将自定义dataSource对象声明为存储属性?

时间:2019-01-16 07:11:51

标签: ios swift uitableview

我为tableView使用自定义dataSource对象:

class MyDataSource: NSObject, UITableViewDataSource {
  // ...
}

在此代码中正常工作:

class ViewController: UIViewController {
  @IBOutlet weak var tableView: UITableView! 
  // Declare as stored property
  let dataSource = MyDataSource()

  override func viewDidLoad() {
    super.viewDidLoad()
    tableView.dataSource = dataSource
  }
}

但是在此代码中,tableView不显示任何内容(= {MyDataSource方法未调用):

class ViewController: UIViewController {
  @IBOutlet weak var tableView: UITableView! 

  override func viewDidLoad() {
    super.viewDidLoad()

    // Declare as local variable
    let dataSource = MyDataSource()
    tableView.dataSource = dataSource
  }
}

我的问题是:

  • 为什么我应该将MyDataSource声明为存储属性?
  • 如果我使用局部变量,我的tableView何时会丢失数据源?

1 个答案:

答案 0 :(得分:4)

问题是,如果您在viewDidLoad中声明数据源常量,则只要此方法中的代码运行,表视图就会为您的自定义数据源提供引用。因此,viewDidLoad返回时,数据源将丢失。

相关问题