【问题标题】:Should I kill peer methods when moving away from a UIView?离开 UIView 时我应该杀死对等方法吗?
【发布时间】:2013-11-15 18:37:08
【问题描述】:

我遇到的情况可能是由于对使用委托时的一般方法缺乏了解而引起的。你能帮忙吗?

假设我有一个 UIView,名为“homeViewController”。

这个 UIView 实例化了一个名为“datastoreSync”的类,它是一个处理后端与远程服务器同步的包装类。我将 UIView 设置为委托并将 datastoreSync 类分配给 UIVIew 内的变量

datastoreSync 类依次触发多个类和方法,依次将自己设置为每个类和方法的委托。所以...... datastoreSync 类将实例化“assetTree”并将自己设置为委托。它等待“我已经完成了!”委托事件,然后移动到下一个类。

assetTree 类(以及所有其他小类)依次委托给处理通信的 NSURLConnection 对象。

现在,datastoreSync 包装类可能需要一些时间来完成它的工作,并且当它运行时,用户可能会从我的 UIView 移动到另一个 UIView。当发生这种情况时,datastoreSync 对象会在assetTree 类完成它的工作时保持活动一段时间。当assetTree 类将自己设置为 NSURLConnection 的委托并设置运行 datastoreSync 类的 NSURLConnection 时,就会超出范围。然后,assetTree 类无法将委托事件返回给它,不幸的是,datastoreSync 类中阻止它连续运行多次的静态变量无法重置,因此 datastoreSync 类变得“锁定”,无法再次运行。

我担心我遗漏了一些基本的东西。如果用户关闭设备,我需要 datastoreSync 类保持活动状态,以便他们可以启动同步过程然后锁定他们的设备,很高兴更新将在后台继续,但我不知道什么时候我应该做什么从一个 UIView 移动到另一个。

我是否在离开视图时向 datastoreSync 类发送“kill”命令,然后对其进行编码以停止所有委托方法,例如 assetsTree 类,实质上是丢弃它的 NSURLConnection 响应?

我不确定如何正确处理这个问题。我不害怕很多工作,我只是希望它是正确的。

【问题讨论】:

  • 当你说UIView时,你的意思是UIViewController吗?它们是非常不同的东西。
  • 是的,我的意思是 UIVIewController。感谢您指出我的错误!

标签: ios objective-c memory-management delegates


【解决方案1】:

不要在离开 UIView 时发送终止命令,而是在请求的开头添加逻辑以取消/清除先前 UIView 中锁定 datastoreSync 的挂起任务。这允许datastoreSync 在后台处理期间保持活动状态,并且仅在必要时清除会阻止新请求的任务。

【讨论】:

  • 我不确定这是否有利于维护,因为我可能会访问的每个页面都必须知道上一页开始的每个进程。我真的很感谢你给我一个答案,所以请不要认为我忘恩负义。谢谢。
  • 你是对的:UIView 对象应该不知道其他视图。为此,您的 datastoreSync 类应该只关注与您的数据存储同步。
  • 我明白你在说什么,这是从另一边解决问题并在之后而不是之前取消操作。这与该主题的答案最接近,因此我将其标记为答案。谢谢
【解决方案2】:

我担心我遗漏了一些基本的东西。

是的。

UIView,名为'homeViewController'。

这个UIView实例化了一个(控制器类)

你不应该这样做;阅读 M-V-C。

视图必须只关心绘图的东西; 模型应该只关心存储东西;启动、停止和一般控制事物的角色属于控制器

因此,您应该从应用委托(如果您在启动时立即需要它)或视图控制器(作为对用户操作的响应)或其他控制器实例化您的数据库连接。

【讨论】:

  • 您好,感谢您的回复。 jim 正确地把我拉起来并指出我的意思是 UIViewController 不是 UIView。很抱歉造成混乱。
  • 虽然可以在 AppDelegate 中建立数据库连接,但我们在这里关注的是通过 Web 服务与远程数据库的连接。我们正在讨论的类处理 iOS 数据库(代码数据)和远程数据库(MS Sql 服务器)之间的同步。
猜你喜欢
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 2015-10-22
相关资源
最近更新 更多