Objective-c (iOS) 中常见的 HTTP 请求委托模式

Posted

技术标签:

【中文标题】Objective-c (iOS) 中常见的 HTTP 请求委托模式【英文标题】:Common HTTP request delegate pattern in Objective-c (iOS) 【发布时间】:2011-09-05 13:47:39 【问题描述】:

我有一个发出 HTTP 请求的视图控制器“myViewController”。我将请求的代表设置为self(myViewController 的实例)。一切正常,直到我在请求返回之前将 myViewController 从导航堆栈中弹出。在这种情况下,请求会尝试向已解除分配的 myViewController 发送消息(这会导致我的应用崩溃)。

目前我正在通过在 myViewController 的 dealloc 方法中将所有请求的委托设置为 nil 来修补/解决此问题。 有什么更好的方法来做到这一点?

也许单例可以负责处理所有 HTTP 请求?

【问题讨论】:

【参考方案1】:

不久前,我在 UIWebView 委托事件中遇到了同样的问题。解决方案是跟踪您的myViewController 中的所有传出HTTP 请求。因此,请保留一个名为 mutableRequests 的实例变量,您可以在其中添加您发送的每个请求。完成后从该数组中删除请求可能也是一个好主意。

-viewWillUnload 方法中,简单地枚举mutableRequests 并取消每个请求。这不仅可以让您在释放视图之前取消所有请求,还可以通过在数组中保留所有正在使用的对象来帮助您尊重释放/保留编程模型。

【讨论】:

这种方法可行。很高兴注意取消请求时会发生什么。例如,一些请求可能会向视图控制器发送一条消息,调用 requestCancelled(或类似的)。认为有可能在视图控制器被释放后发送此消息。【参考方案2】:

取决于您的视图控制器正在做什么。如果请求仅与该 VC 相关,则执行 Alex 的建议。如果您的应用程序围绕请求(功能的核心部分),您可能会想要那个单例。您可能还需要一个所有视图控制器都实现的通用委托,以便当前视图控制器可以处理您的委托调用。显然,您的请求处理单例将充当您请求的实际委托,并在必要时调用 您的 委托方法。

【讨论】:

以上是关于Objective-c (iOS) 中常见的 HTTP 请求委托模式的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式

iOS开发中常见的一些异常

使用 Objective-C iOS 制作选项卡切换布局

在 Objective-C 中使用异常

请问Objective-c 内存溢出问题经验汇总,那个好心人共享一下

ios-Objective-C中的各种遍历(迭代)方式(转载)