这些快速代码行有何不同?

时间:2016-12-06 21:32:19

标签: swift

let fakeDataSource = FakeDataSource()

tableView?.dataSource = fakeDataSource

与直接使用:

直接调用它
tableView?.dataSource = FakeDataSource()

第二个示例因NSException崩溃,但第一个示例编译并运行。我很难看到差异。如果您需要粘贴更多代码,请告诉我们。

1 个答案:

答案 0 :(得分:2)

两者都是一个问题,但第一个可能会更好,简单。

UITableView dataSourceweak属性。因此,除非其他内容具有对数据源对象的强引用,否则数据源将变为nil

在第一组代码中,FakeDataSource实例由fakeDataSource变量保留。因此,FakeDataSource实例将一直存在,直到fakeDataSource变量超出范围。

在第二组代码中,创建FakeDataSource并在一行中分配。在该行之后,不再有对FakeDataSource实例的任何强引用,因此它会在那里被取消分配,dataSource几乎立即变为nil

在这两种情况下,都存在问题。唯一的区别是FakeDataSource实例被解除分配的时间。

两者的修复方法相同。保持对FakeDataSource实例的强引用。这通常通过使用属性来完成。