基于通知的iOS应用程序

基于通知的iOS应用程序,ios,delegates,model,nsnotification,Ios,Delegates,Model,Nsnotification,我目前正在考虑iOS应用程序的数据模型。应用程序只接收来自服务器的信息,因此,“模型”本身通常处理所有web请求,… 但是,这些网络请求必须在后台执行—我指的是另一个任务,而不是iOS后台状态—并且在请求完成后,必须更新应用程序中的信息 写一个代表通知管制员或者我也可以使用NSNotificationCenter更有意义吗?我认为基于NSNotification的解决方案可以使模型更加通用,例如在桌面应用程序中。 也许,我应该补充一点:模型(因为它保存了一些会话信息)是单例的,因此常规的基于委托

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

写一个代表通知管制员或者我也可以使用NSNotificationCenter更有意义吗?我认为基于NSNotification的解决方案可以使模型更加通用,例如在桌面应用程序中。

也许,我应该补充一点:模型(因为它保存了一些会话信息)是单例的,因此常规的基于委托的方法不起作用…

委托解决方案确实起作用,建议使用。它看起来像:

[[DataLayer sharedInstance] fetchDataWithDelegate:self];

该方法可以生成后台线程并响应主线程上的委托。

委托解决方案确实有效,建议使用。它看起来像:

[[DataLayer sharedInstance] fetchDataWithDelegate:self];

该方法可以生成一个后台线程并响应主线程上的委托。

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

具体而言,您可以创建一个执行:

NSURLRequest* yourReq = [NSURLRequest requestWithURL:yourURL];
然后使用以下内容创建一个:

从以下几点开始:

[yourConnection start];
数据准备好后,将调用委托的一个方法(
connectiondFinishLoading:
,或
connection:didFailWithError:
),以便您可以更新UI

这一切都没有阻碍

除了使用
NSURLConnection/NSURLRequest
,还有一个更好的替代方法,就是使用,它似乎对内存管理更具弹性,还提供了一个很好的缓存机制

编辑:如果你担心你的模特是单身,你不能有一个代表,让我建议你进一步调查此事

您的模型可能是单例模型,请求的委托可能与模型无关,只知道如何访问它(单例模型非常简单)


这可以通过几个具有
NSURLConnection
的机制实现,但是如果您使用
ASIHTTPRequest
,它将变得非常简单,因为每个
ASIHTTRequest
都可以有自己的委托。

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

具体而言,您可以创建一个执行:

NSURLRequest* yourReq = [NSURLRequest requestWithURL:yourURL];
然后使用以下内容创建一个:

从以下几点开始:

[yourConnection start];
数据准备好后,将调用委托的一个方法(
connectiondFinishLoading:
,或
connection:didFailWithError:
),以便您可以更新UI

这一切都没有阻碍

除了使用
NSURLConnection/NSURLRequest
,还有一个更好的替代方法,就是使用,它似乎对内存管理更具弹性,还提供了一个很好的缓存机制

编辑:如果你担心你的模特是单身,你不能有一个代表,让我建议你进一步调查此事

您的模型可能是单例模型,请求的委托可能与模型无关,只知道如何访问它(单例模型非常简单)


这可以通过几个具有
NSURLConnection
的机制实现,但是如果您使用
ASIHTTPRequest
,它将变得非常简单,因为每个
ASIHTTRequest
都可以有自己的委托。

好的,谢谢。但总的来说,将此类模型设为单例并没有错,对吗?在我使用过的几乎所有应用程序中,我们都使用单例类作为数据层的入口点。我不认为这有什么问题。我知道有些人一般认为单身是件坏事,但我看不出有什么问题。好的,谢谢。但总的来说,将此类模型设为单例并没有错,对吗?在我使用过的几乎所有应用程序中,我们都使用单例类作为数据层的入口点。我不认为这有什么问题。我知道有些人一般认为单身是一件坏事,但我看不出有什么问题。谢谢,我现在实际上是这样使用NSURlConnection:D这个ASIHTTPRequest的东西看起来真的很神奇,因为我也在我的应用程序中下载大文件…你应该始终在单独的线程中处理通信,否则在通信期间UI将冻结。唯一的问题是您是自己生成线程还是让API为您生成线程。@chrischw_de I也可以推荐ASIHTTPRequest。@Erik B:异步I/O由操作系统通过中断来处理。这样就不需要使用线程来避免阻塞。非阻塞行为是中断固有的。这里您有更多详细信息:@chrischw_de:如果您认为您无法使用委托,因为您的模型是单体模型,请参阅我的编辑。谢谢,我现在实际上是这样使用NSURlConnection:D这个ASIHTTPRequest的东西看起来真的很神奇,因为我也在我的应用程序中下载大文件…你应该始终在单独的线程中处理通信,否则在通信期间UI将冻结。唯一的问题是您是自己生成线程还是让API为您生成线程。@chrischw_de I也可以推荐ASIHTTPRequest。@Erik B:异步I/O由操作系统通过中断来处理。这样就不需要使用线程来避免阻塞。非阻塞行为是interru固有的