gpt4 book ai didi

ios - 拆除 UITableViewDataSource

转载 作者:行者123 更新时间:2023-11-29 13:06:02 25 4
gpt4 key购买 nike

在我们的应用程序中,我们有几个 UITableView,它们具有网络支持的数据源,实际填充这些数据源可能需要一些时间。以下是通常发生的情况:

  1. 用户触发 View 。
  2. 在 viewDidLoad 中,创建 View 的数据源。
  3. 模型的 -load 方法被调用
  4. 模型发出网络请求以获取一些数据...
  5. 在请求完成之前,用户退出 View 。
  6. 调用 View 的 ViewWillDisappear、ViewDidDisappear、ViewDidUnload 和 dealloc 方法。
  7. 请求完成。不幸的是,所有或部分表格 View 都消失了,因此造成了严重破坏。

因此,我们的解决方案是正确地“拆除”数据源并取消所有未完成的网络请求,这样就不会发生这种情况。我的问题是:

  1. 拆除数据源的“正确”方法是什么?您是否只是丢失了对它的所有引用,并使用 -dealloc 取消未完成的网络请求?

  2. 你应该在哪里拆掉它?在 ViewDidUnload?释放?

  3. 同样的两个问题实际上也适用于模型:拆解它的正确方法是什么?什么时候?

请注意,这不仅适用于网络请求:我们还有另一个使用地理定位的 View ,有时在调用地理定位完成 block 时,它应该更新的 View 早已消失。

谢谢!

附言附加问题:

  1. 对于 UITableView,是否有可能在调用 UITableView 的 -dealloc 之前取消分配 View 中的行?如果它们在,比方说,ViewWillDisappear 时间被释放,并且请求恰好在此之后完成,但在 -dealloc 之前,那么如果请求恰好尝试更新 UITableView 行,则会发生严重破坏。

这有意义吗?

最佳答案

您使用的是 Objective-c、C++ 还是 Objective-C++?我问是因为您指的是使用 c++ 语法 (::) 而不是 obj-c (-) 的方法,而且我不擅长 c++ 方面。

如果您的对象在被释放(拆除)时有工作要做,通常您会实现 -dealloc 方法。在那里你可以取消网络请求并释放任何低级资源,如文件句柄。当不再有对该实例的引用并且它已准备好释放它时,obj-c 运行时将自动调用此方法 - 您不应手动调用此方法。

普遍接受的模式是在您完成对对象的所有强引用后将其置零,并让运行时处理释放它。如果您在任何地方(网络、文件系统访问、GPS 等)都遵循该模式,那么使用它会非常容易。

关于ios - 拆除 UITableViewDataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18617931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com