Objective-c(iOS)中的通用HTTP请求委托模式
我有一个视图控制器“myViewController”,可以发出HTTP请求。我将请求的委托设置为Objective-c(iOS)中的通用HTTP请求委托模式,ios,delegates,uiviewcontroller,singleton,httprequest,Ios,Delegates,Uiviewcontroller,Singleton,Httprequest,我有一个视图控制器“myViewController”,可以发出HTTP请求。我将请求的委托设置为self(myViewController的实例)。在请求返回之前,我将myViewController从导航堆栈中弹出之前,一切正常。在这种情况下,请求尝试向dealloc的myViewController发送消息(这会导致我的应用程序崩溃) 目前,我正在修补/解决这个问题,方法是在myViewController的dealloc方法中将所有请求的委托设置为nil有什么更好的方法吗? 也许一个单例
self
(myViewController的实例)。在请求返回之前,我将myViewController从导航堆栈中弹出之前,一切正常。在这种情况下,请求尝试向dealloc的myViewController发送消息(这会导致我的应用程序崩溃)
目前,我正在修补/解决这个问题,方法是在myViewController的dealloc
方法中将所有请求的委托设置为nil
有什么更好的方法吗?
也许一个单例可以负责处理所有HTTP请求?不久前,我在UIWebView委托事件中遇到了同样的问题。解决方案是跟踪
myViewController
中所有传出的HTTP请求。因此,保留一个名为mutableRequests
的实例变量,将发送的每个请求添加到该变量中。一旦请求完成,从这个数组中删除请求可能也是一个好主意
在
-viewWillUnload
方法中,只需通过mutableRequests
枚举并取消每个请求。这不仅允许您在解除分配视图之前取消所有请求,还可以通过在使用过程中保留数组中的所有对象来帮助您遵守发布/保留编程模型。不久前,我在UIWebView委托事件中遇到了同样的问题。解决方案是跟踪myViewController
中所有传出的HTTP请求。因此,保留一个名为mutableRequests
的实例变量,将发送的每个请求添加到该变量中。一旦请求完成,从这个数组中删除请求可能也是一个好主意
在
-viewWillUnload
方法中,只需通过mutableRequests
枚举并取消每个请求。这不仅允许您在解除分配视图之前取消所有请求,还将帮助您在使用过程中保留阵列中的所有对象,从而尊重释放/保留编程模型。取决于您的视图控制器正在执行的操作。如果请求只与该VC相关,那么按照Alex的建议执行。如果你的应用程序围绕着请求(功能的核心部分)运行,你可能会想要那个单例。您可能还需要一个所有视图控制器都实现的公共委托,以便当前视图控制器可以处理委托调用。显然,您的请求处理单例将作为您请求的实际委托,并根据需要调用您的委托方法。取决于您正在执行的操作。如果请求只与该VC相关,那么按照Alex的建议执行。如果你的应用程序围绕着请求(功能的核心部分)运行,你可能会想要那个单例。您可能还需要一个所有视图控制器都实现的公共委托,以便当前视图控制器可以处理委托调用。显然,您的请求处理单例将作为请求的实际委托,并在必要时调用委托方法。这种方法可行。注意取消请求时会发生什么很好。例如,一些请求可能会向视图控制器发送一条调用requestCancelled(或类似)的消息。认为此消息可能在视图控制器解除锁定后发送。在myViewController
解除锁定后接收此消息的唯一方法是将HTTP请求报告给其他委托,例如全局对象或应用程序委托。此方法可行。注意取消请求时会发生什么很好。例如,一些请求可能会向视图控制器发送一条调用requestCancelled(或类似)的消息。认为此消息可能在视图控制器解除锁定后发送。在myViewController
解除锁定后接收此消息的唯一方法是将HTTP请求报告给其他代理,例如全局对象或应用程序代理。