gpt4 book ai didi

ios - 基于 NSNotification 的 iOS App

转载 作者:行者123 更新时间:2023-11-29 13:48:29 26 4
gpt4 key购买 nike

我目前正在考虑我的 iOS 应用程序的数据模型。该应用程序只从服务器接收信息,因此,“模型”本身通常会处理所有网络请求,...
但是,这些网络请求必须在后台执行 - 我的意思是另一个任务,而不是 iOS 后台状态 - 请求完成后,应用程序中的信息必须更新。

写一个委托(delegate)来通知 Controller 是否更有意义,还是我也可以使用 NSNotificationCenter?我认为基于 NSNotification 的解决方案可以使模型更加通用,例如在桌面应用程序中。
也许,我应该补充一点:该模型(因为它保存了一些 session 信息)是一个单例,因此基于常规委托(delegate)的方法将不起作用...

最佳答案

我不认为使用单独的线程来处理通信是个好主意。除了复杂之外,它不是必需的,因为 NSURLConnection/NSURLRequest 确实允许您异步处理通信,即无阻塞。

详细来说,你可以创建一个NSURLRequest执行:

NSURLRequest* yourReq = [NSURLRequest requestWithURL:yourURL];

然后创建一个 NSURLConnection与:

NSURLConnection* yourConnection = [NSURLConnection connectionWithRequest:yourReq delegate:yourDelegate];

并开始:

[yourConnection start];

当数据准备就绪时,将调用委托(delegate)的方法之一(connectionDidFinishLoading:connection:didFailWithError:),以便您可以更新 UI .

所有这些都没有阻塞。

使用 NSURLConnection/NSURLRequest 的更好替代方法是使用 ASIHTTPRequest ,这似乎在内存管理方面更有弹性,并且还提供了一个很好的缓存机制。

编辑:如果您担心作为单例的模型,您不能拥有委托(delegate),我建议您进一步调查此事。

您的模型可能是一个单例,您的请求的委托(delegate)可能与该模型无关,除了知道如何访问它(这对于单例模型来说是非常微不足道的)。

这可以通过 NSURLConnection 的几种机制来实现,但是如果你使用 ASIHTTPRequest,这将变得非常容易,因为每个 ASIHTTPRequest 都可以有它自己的委托(delegate)。

关于ios - 基于 NSNotification 的 iOS App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6140707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com