let fakeDataSource = FakeDataSource()
tableView?.dataSource = fakeDataSource
与直接使用:
直接调用它tableView?.dataSource = FakeDataSource()
第二个示例因NSException崩溃,但第一个示例编译并运行。我很难看到差异。如果您需要粘贴更多代码,请告诉我们。
答案 0 :(得分:2)
两者都是一个问题,但第一个可能会更好,简单。
UITableView dataSource
是weak
属性。因此,除非其他内容具有对数据源对象的强引用,否则数据源将变为nil
。
在第一组代码中,FakeDataSource
实例由fakeDataSource
变量保留。因此,FakeDataSource
实例将一直存在,直到fakeDataSource
变量超出范围。
在第二组代码中,创建FakeDataSource
并在一行中分配。在该行之后,不再有对FakeDataSource
实例的任何强引用,因此它会在那里被取消分配,dataSource
几乎立即变为nil
。
在这两种情况下,都存在问题。唯一的区别是FakeDataSource
实例被解除分配的时间。
两者的修复方法相同。保持对FakeDataSource
实例的强引用。这通常通过使用属性来完成。