有一个加载的 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
});
}
如何防止这种情况发生?
编辑:
没有必要创建自己的队列,因此我更改了代码 - 同样的问题仍然存在。
Best Answer-推荐答案 strong>
将它放在初始化代码中或将 myQueue 移动到一个实例变量中,然后检查它是否存在。
-(id)initWithNibNameNSString *)nibNameOrNil bundleNSBundle *)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/
|