【发布时间】: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