有一个加载 View 和一个创建的串行调度队列,在后台加载大量内容并且工作得很好。问题是,当我来回导航到该 View 时,会再次创建一个新队列,然后我有多个任务执行完全相同的工作。
- (void)viewDidLoad {
dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
dispatch_async(myQueue, ^{
//function call to a helper outside the scope of this view
});
}
如何防止这种情况发生?
编辑: 不需要创建自己的队列,因此我更改了代码 - 同样的问题仍然存在。
最佳答案
将其放入初始化代码中或将 myQueue 移至实例变量,然后检查其是否存在。
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])
{
dispatch_queue_t myQueue = dispatch_queue_create("com.mydomain.myapp.longrunningfunction", NULL);
dispatch_async(myQueue, ^{
//function call to a helper outside the scope of this view
});
dispatch_async(myQueue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
dispatch_release(myQueue);
});
});
}
return self;
}
或者...
- (void)viewDidLoad {
if(!_myQueue)
{
_myQueue = dispatch_queue_create("com.mydomain.myapp.longrunningfunction", NULL);
dispatch_async(_myQueue, ^{
//function call to a helper outside the scope of this view
});
dispatch_async(_myQueue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
dispatch_release(_myQueue);
});
});
}
}
如果您只希望它在应用程序的单次运行期间运行一次,您可以使用 dispatch_once
关于iphone - 防止在viewDidLoad中创建多个dispatch_queue_create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6525666/