以下是我用来调用5个不同服务以获取响应并将其存储在我的json文本文件中的代码。当后台服务调用正在运行时,我的应用程序正在挂起,没有触摸事件正在工作。后台服务调用它working.i不想在调用后台服务时挂起我的应用程序我该怎么做。
[NSTimer scheduledTimerWithTimeInterval:60.0 target:self
selector:@selector(checkAlert) userInfo:nil repeats:YES];
答案 0 :(得分:1)
你可以使用Grand Central Dispatch(GCD),你可以编写代码在后台线程上进行一些处理,然后在主运行循环中对结果做一些非常简单和紧凑的事情:
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Add code here to do background processing
//
//
dispatch_async( dispatch_get_main_queue(), ^{
// Add code here to update the UI/send notifications based on the
// results of the background processing
});
});
如果想要添加延迟,那么也可以使用
// Delay execution of my block for 10 seconds.
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
// call your method
});
答案 1 :(得分:0)
你实际上并没有在后台调用它,因为你的UI被冻结了。
dispatch_async( dispatch_get_global_queue(0, 0), ^{
[NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(checkAlert) userInfo:nil repeats:YES];
});
但请注意,如果您需要更新UI,请在主线程中执行,否则UI相关任务将不会更新。