Iphone iOS:在后台运行部分代码

Iphone iOS:在后台运行部分代码,iphone,ios,multithreading,asihttprequest,grand-central-dispatch,Iphone,Ios,Multithreading,Asihttprequest,Grand Central Dispatch,可能重复: 我希望我的iOS应用程序的代码部分在应用程序进入后台时继续运行 我有一个类应该运行函数序列。每个函数都使用ASIHTTPRequest异步加载数据。我想在应用程序处于后台时继续运行这些功能,当最后一个ASIHTTP请求完成时,我应该显示本地通知 我有一些类似于遵循代码的东西 -(void)start//从另一个类调用此方法 { __block ASIHTTPRequest*request=[ASIHTTPRequest requestWithURL:url]; [当输入背景:是时,

可能重复:

我希望我的iOS应用程序的代码部分在应用程序进入后台时继续运行

我有一个类应该运行函数序列。每个函数都使用ASIHTTPRequest异步加载数据。我想在应用程序处于后台时继续运行这些功能,当最后一个ASIHTTP请求完成时,我应该显示本地通知

我有一些类似于遵循代码的东西

-(void)start//从另一个类调用此方法
{
__block ASIHTTPRequest*request=[ASIHTTPRequest requestWithURL:url];
[当输入背景:是时,请求设置应继续];
[请求setCompletionBlock:^{
NSData*responseData=[request responseData];
NSXMLParser*xmlParser=[[NSXMLParser alloc]initWithData:responseData];
[xmlParser setDelegate:self];
[xmlParser parse];
[xmlParser release];
}];
[请求启动同步];
}
-(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName属性:(NSDictionary*)attributeDict
{
//解析xml
如果(一切正常)
{
[自我功能1];
}
}
-(无效)职能1
{
__block ASIHTTPRequest*request=[ASIHTTPRequest requestWithURL:url];
[当输入背景:是时,请求设置应继续];
[请求setCompletionBlock:^{
[自我功能2];
}];
[请求启动同步];
}
-(无效)职能2
{
//像func1
....
[自我功能3];
}
-(无效)职能3
{
__block ASIHTTPRequest*request=[ASIHTTPRequest requestWithURL:url];
[当输入背景:是时,请求设置应继续];
[请求setCompletionBlock:^{
//如果应用程序位于后台,则处理本地通知
}];
[请求启动同步];
}
我尝试使用下一个代码包装每个方法,当应用程序位于后台时,最后一个请求函数永远不会完成:
dispatch\u async(dispatch\u get\u global\u queue(dispatch\u queue\u PRIORITY\u DEFAULT,(unsigned long)NULL),^(void){..func的作用域..}]

您需要使用beginBackgroundTaskWithExpirationHandler进行调度_async,否则当应用程序位于后台时,它将不会运行。

有关示例代码,请参阅检查此代码的帮助:那么,如果我这样做并启动1分钟无限定时器发送这两个调用,会怎么样?我的应用程序会在10分钟后终止吗?