菜鸟教程小白 发表于 2022-12-13 08:06:14

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(&#34;com.mydomain.myapp.longrunningfunction&#34;, 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(&#34;com.mydomain.myapp.longrunningfunction&#34;, 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]
查看完整版本: iphone - 防止在 viewDidLoad 中创建多个 dispatch_queue_create