在我的iOS应用中,我想在用户打开新的ViewController时执行后台任务。在这个特定的实例中,我在服务器上处理一些图像并返回从图像创建的GIF的URL。
在同一个ViewController中,我有一个允许用户下载GIF的按钮。我想设计用户在服务器上创建GIF时尝试下载GIF的情况。
我目前在我的应用中设置的方式是在ViewWillAppear中添加一个监听器:
[[NSNotificationCenter defaultCenter] addObserver:self selector:nil name:@"generatedGIF" object:nil];
然后我用方法
在后台处理GIF[self generateSpinGIF];
然后在方法generateSpinGIf中,我在服务器上创建GIF后发布通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"generatedGIF" object:self];
另外,我有一个IBAction来检测用户何时点击按钮下载GIF。此时,我想要下载GIF(如果它已经存在)或等到后台进程完成。
实现此目的的方法是什么?
答案 0 :(得分:0)
不是使用通知,而是在视图控制器的成员变量中创建gcd队列。使用dispatch_async创建GIF。当用户点击按钮时,在同一队列上使用dispatch_sync来检索GIF。如果GIF已存在,则dispatch_sync将立即执行。如果创建过程尚未完成,它将一直阻止,直到创建完成。