gpt4 book ai didi

iphone - 防止在 viewDidLoad 中创建多个 dispatch_queue_create

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:18:46 25 4
gpt4 key购买 nike

有一个加载的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com