我试图弄清楚如何在Objective-C(iOS)中以一种不会挂起UI线程的方式记录正在运行的任务,有点像后台工作人员或.Net中的TPL。
我正在寻找一种以可维护的方式处理此类工作的方法,这被认为是 iOS 开发人员的最佳实践?
我试图弄清楚如何在Objective-C(iOS)中以一种不会挂起UI线程的方式记录正在运行的任务,有点像后台工作人员或.Net中的TPL。
我正在寻找一种以可维护的方式处理此类工作的方法,这被认为是 iOS 开发人员的最佳实践?
有很多方法可以做到这一点,例如NSThread
, NSOperation
/ NSOperationQueue
classes 或GCD
. 示例代码(GCD):
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//background work
});
你可以在这里阅读:并发编程指南
对于 GCD,试试这个测试:(也可以参考 Adam 和 Martin R 建议的 Apple 文档。
- (IBAction)dispatchQPressed:(id)sender
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
for (int i=0; i<1000; i++)
{
NSLog(@"Running in background thread concurrently: %i", i);
}
});
for (int i = 0; i<200; i++)
{
NSLog(@"run in main thread:%i", i);
}
}