ios - 拆除 UITableViewDataSource

标签 ios objective-c uitableview

在我们的应用程序中,我们有几个 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/

相关文章:

ios - 平移以擦洗视频时考虑当前时间

ios - 具有连续 UILabel 的 iPhone 自定义单元格

iOS 将音频采样率从 16 kHz 转换为 8 kHz

objective-c - 带有几个参数的 performSelector

ios - 在 TableView 中显示具有相同键的多个对象

IOS 检测是否在 End On Exit 事件中单击了另一个文本字段

objective-c - 用不同线宽的部分绘制连续的CGPath

ios - 我们需要在 cellForRowAt 上做 crash App 吗?

objective-c - 重用以编程方式创建的 UITableView?

ios - 搜索 Controller 搜索字典数组