iphone - 防止在 viewDidLoad 中创建多个 dispatch_queue_create
<p><p>有一个加载的 View 和一个创建的串行调度队列,在后台加载大量的东西并且工作得很好。问题是当我来回导航到该 View 时,会再次创建一个新队列,然后我有多个事情在做完全相同的工作。</p>
<pre><code>- (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
});
}
</code></pre>
<p>如何防止这种情况发生?</p>
<p>编辑:
没有必要创建自己的队列,因此我更改了代码 - 同样的问题仍然存在。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>将它放在初始化代码中或将 myQueue 移动到一个实例变量中,然后检查它是否存在。</p>
<pre><code>-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
if (self = )
{
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;
}
</code></pre>
<p>或者……</p>
<pre><code>- (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);
});
});
}
}
</code></pre>
<p>如果您只希望它在应用程序的单次运行期间运行一次,您可以使用 <a href="https://developer.apple.com/library/ios/DOCUMENTATION/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html#//apple_ref/c/func/dispatch_once" rel="noreferrer noopener nofollow"><code>dispatch_once</code></a> </p></p>
<p style="font-size: 20px;">关于iphone - 防止在 viewDidLoad 中创建多个 dispatch_queue_create,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/6525666/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/6525666/
</a>
</p>
页:
[1]