离开UIView时我应该杀死对等方法吗?

时间:2013-11-15 18:37:09

标签: ios objective-c memory-management delegates

我有一种情况,我可能是因为在使用委托时缺乏对一般方法的理解。你能帮忙吗?

考虑一下我有一个名为'homeViewController'的UIView。

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

类datastoreSync依次触发几个类和方法,依次将自己设置为每个类和方法的委托。所以... datastoreSync类将实例化'assetTree'并将自己设置为委托。等待'我已经完成了!'委托事件,然后进入下一个班级。

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

  

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

烨。

  

UIView ,名为'homeViewController '。

     

UIView 实例化(控制器类)

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

观看次数只能关注绘图事物; 模型只应关注存储事物;启动,停止和一般控制事物的作用属于控制器

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