我需要为我的 iOS 应用程序执行一个非常简单的背景检查。它只需要对我的网络服务器进行一次调用,并根据我的应用程序中的某些内容检查它检索到的号码。这种背景调查可以做吗?如果是这样,我该怎么做才能把它放在一起?
编辑
澄清我所说的背景是什么意思:我是指电话上的背景。当应用程序不存在时。是否可以在后台执行此请求?显然,该应用程序并未完全脱离多任务处理。
我需要为我的 iOS 应用程序执行一个非常简单的背景检查。它只需要对我的网络服务器进行一次调用,并根据我的应用程序中的某些内容检查它检索到的号码。这种背景调查可以做吗?如果是这样,我该怎么做才能把它放在一起?
编辑
澄清我所说的背景是什么意思:我是指电话上的背景。当应用程序不存在时。是否可以在后台执行此请求?显然,该应用程序并未完全脱离多任务处理。
这听起来像是 NSOperationQueue 的完美之选。
http://www.raywenderlich.com/19788/how-to-use-nsoperations-and-nsoperationqueues
您可以编写一个操作,然后在需要时将其放入队列中。
或者,更简单的是,您可以执行一个非常简单的异步调用。
+ (NSArray *) myGetRequest: (NSURL *) url{
NSArray *json = [[NSArray alloc] init];
NSData* data = [NSData dataWithContentsOfURL:
url];
NSError *error;
if (data)
json = [[NSArray alloc] initWithArray:[NSJSONSerialization
JSONObjectWithData:data
options:kNilOptions
error:&error]];
if (error)
NSLog(@"%@", error)
return json;
}
然后把它放在一个简单的调度块中......
dispatch_queue_t downloadQueueA = dispatch_queue_create("updater", NULL);
dispatch_async(downloadQueueA, ^{
// stuff done here will happen in the background
NSArray * arrayOfData = [self myGetRequest: myURL];
// could be array... dictionary... whatever, you control this by returning the type of data model you want from the server formatted as JSON data
NSString * stringValue = arrayOfData[index];
dispatch_async(dispatch_get_main_queue(), ^{
// perform checking here and do whatever updating you need to do based on the data
});
});
有很多方法可以检查您的服务器和检索数据。
这是我的建议:
如果您的服务器速度很快并且您只需要获得一个号码,您可以在主线程中执行此操作,否则使用:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
// your request here
});
根据要求在不同的胎面工作。
并记得检查互联网连接和您的服务器是否可用,例如 Reachability 并使用 NSURLRequest 委托管理连接错误
您应该可以使用 Grand Central Dispatch 做到这一点:https ://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html
看看这个 iOS 上的多线程和 Grand Central Dispatch 教程。