Ios 当我离开UIView时是否应该杀死对等方法?

Ios 当我离开UIView时是否应该杀死对等方法?,ios,objective-c,memory-management,delegates,Ios,Objective C,Memory Management,Delegates,我有一种情况可能是我造成的,因为在使用代理时缺乏对一般方法的理解。你能帮忙吗 假设我有一个名为“homeViewController”的UIView 此UIView实例化了一个名为“datastoreSync”的类,该类是一个包装类,用于处理后端与远程服务器的同步。我将UIView设置为委托,并将datastoreSync类分配给UIView中的一个变量 类datastoreSync依次触发几个类和方法,并将自身设置为这些类和方法的委托。所以datastoreSync类将实例化“assetTre

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

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

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

类datastoreSync依次触发几个类和方法,并将自身设置为这些类和方法的委托。所以datastoreSync类将实例化“assetTree”,并将自身设置为委托。它等待着“我做完了!”委托事件,然后移动到下一个类

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

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

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

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


我不确定如何正确处理这个问题。我不害怕大量的工作,我只是希望它是正确的。与其在离开UIView时发送kill命令,不如在请求的开头添加逻辑,以取消/清除先前UIView中锁定您的
数据存储同步的挂起任务。这允许
datastoreSync
在后台处理期间保持活动状态,并且仅在必要时清除会阻止新请求的任务

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

是的

UIView,称为“homeViewController”

UIView实例化(控制器类)

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

视图必须只关注绘图模型应该只考虑存储物品;启动、停止和通常控制事物的角色属于控制器


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

当您说
UIView
时,您的意思是
UIViewController
?它们是非常不同的东西。是的,我是说。谢谢你指出我的错误!我不确定这是否有利于维护,因为我可能访问的每个页面都必须知道上一页启动的每个流程。我真的很感谢你给我一个答案,所以请不要认为我忘恩负义。谢谢。您是对的:UIView对象应该不知道其他视图。要做到这一点,datastoreSync类应该只关注与数据存储的同步。我明白你的意思,这是从另一方面解决问题,然后取消操作,而不是之前。这是最接近这个主题的答案,所以我将其标记为答案。谢谢你好,谢谢你的回复。jim正确地把我拉了起来,指出我的意思是UIViewController,而不是UIView。很抱歉造成混淆。虽然可以在AppDelegate中建立数据库连接,但我们关心的是通过Web服务与远程数据库的连接。我们正在讨论的类处理iOS数据库(代码数据)和远程数据库(MS Sql server)之间的同步。