Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-c(iOS)中的通用HTTP请求委托模式_Ios_Delegates_Uiviewcontroller_Singleton_Httprequest - Fatal编程技术网

Objective-c(iOS)中的通用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有什么更好的方法吗? 也许一个单例

我有一个视图控制器“myViewController”,可以发出HTTP请求。我将请求的委托设置为
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请求报告给其他代理,例如全局对象或应用程序代理。