Dev*_*ang 14 queue grand-central-dispatch reachability ios parse-platform
我正在使用parse.com API开发一个应用程序(托管后端提供API以在其服务器上保存数据).我希望能够在线和离线无缝使用该应用程序.为此,我需要使用一个队列,我可以放置需要网络访问的块.当网络确实可用时,应该串行执行这些块,当网络脱机时,应该暂停队列处理.
当网络变得可用/不可用时,我正在考虑将GCD用于暂停/恢复.我想知道是否有更好的选择?如果将应用程序放在后台,这会有效吗?这里的一个例子是,当网络不可用(排队等待)然后将应用程序置于后台时,用户会保存一些数据.现在,当网络可用时,是否可以自动在后台进行保存?
Chr*_*lay 16
我完全按照你的目标使用NSOperationQueue.首先,创建一个串行队列并默认将其挂起:
self.operationQueue = [[[NSOperationQueue alloc] init] autorelease];
self.operationQueue.maxConcurrentOperationCount = 1;
[self.operationQueue setSuspended:YES];
Run Code Online (Sandbox Code Playgroud)
然后,创建一个Reachability实例并注册kReachabilityChangedNotification:
[[NSNotificationCenter defaultCenter] addObserver:manager
selector:@selector(handleNetworkChange:)
name:kReachabilityChangedNotification
object:nil];
[self setReachability:[Reachability reachabilityWithHostName:@"your.host.com"]];
[self.reachability startNotifier];
Run Code Online (Sandbox Code Playgroud)
现在,在网络状态更改时启动和停止队列:
-(void)handleNetworkChange:(NSNotification *)sender {
NetworkStatus remoteHostStatus = [self.reachability currentReachabilityStatus];
if (remoteHostStatus == NotReachable) {
[self.operationQueue setSuspended:YES];
}
else {
[self.operationQueue setSuspended:NO];
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下内容排队块:
[self.operationQueue addOperationWithBlock:^{
// do something requiring network access
}];
Run Code Online (Sandbox Code Playgroud)
挂起队列只会阻止操作启动 - 它不会挂起正在进行的操作.在执行操作时,您总是有可能丢失网络,因此您应该在操作中考虑到这一点.
| 归档时间: |
|
| 查看次数: |
5072 次 |
| 最近记录: |