基于NSNotification的iOS App

问题描述

| 我目前正在考虑我的iOS应用程序的数据模型。该应用程序仅从服务器接收信息,因此,“模型”本身通常会执行所有Web请求,... 但是,这些网络请求必须在后台执行-我的意思是另一个任务,而不是iOS后台状态-并且在请求完成后,必须更新应用程序中的信息。 编写委托来通知控制器是否更有意义,或者我也可以使用NSNotificationCenter?我认为基于NSNotification的解决方案可以使模型更加通用,例如在桌面应用程序中。 也许我应该补充:该模型(因为它保存了一些会话信息)是一个单例,因此基于常规委托的方法将不起作用...     

解决方法

我认为使用单独的线程来处理通信不是一个好主意。除了复杂之外,由于ѭ0确实允许您异步处理通信(即无阻塞),因此没有必要。 详细地,您可以创建一个NSURLRequest来执行:
NSURLRequest* yourReq = [NSURLRequest requestWithURL:yourURL];
然后创建一个NSURLConnection与:
NSURLConnection* yourConnection = [NSURLConnection connectionWithRequest:yourReq delegate:yourDelegate];
并从以下开始:
[yourConnection start];
数据准备好后,将调用代表的一种方法(
connectionDidFinishLoading:
connection:didFailWithError:
),以便您可以更新UI。 所有这一切都没有阻碍。 ASIHTTPRequest是使用ѭ0的更好替代方法,它似乎在内存管理方面更具弹性,并且还提供了一种出色的缓存机制。 编辑:如果您担心成为模型的单身人士,那么您将没有委托,请允许我建议您进一步研究该问题。 您的模型可能是一个单例,而您的请求的委托人可能与该模型无关,除了知道如何访问它(将模型作为一个单例是非常琐碎的)。 使用
NSURLConnection
的几种机制可以做到这一点,但是如果您使用
ASIHTTPRequest
,它将变得非常容易,因为每个
ASIHTTRequest
可以有自己的委托。     ,建议使用委托解决方案。看起来像:
[[DataLayer sharedInstance] fetchDataWithDelegate:self];
该方法可以产生一个后台线程并响应主线程上的委托。