菜鸟教程小白 发表于 2022-12-12 09:05:56

ios - CLLocationManager 和串行位置更新处理


                                            <p><p>我需要使用标准位置服务并执行一些处理,包括一些网络调用,通知每个位置更新。我需要按 FIFO 顺序处理位置更新,以跟踪设备并尽快获得结果。确保按顺序处理位置并且处理不重叠(以及获得快速响应)的最佳方式或技术应该是什么:操作队列,调度队列或直接线程(或者甚至是另一种方式,如果存在) ?看起来操作队列和调度队列在性能方面几乎相同,但调度队列似乎更容易处理,所以我不知道它们各自的优点是什么。关于线程,我一直不鼓励通常使用它们,但我不知道它们对操作/调度队列的效率是否真的很明显,是否值得使用它们。</p>

<p>提前致谢</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果您不希望内容在后台同时运行,那么您需要一个串行队列。创建串行 GCD 队列:</p>

<pre><code>dispatch_queue_t queue = dispatch_queue_create(&#34;com.appsdev.project1&#34;, 0);
</code></pre>

<p>每次您想向该队列添加内容时,只需:</p>

<pre><code>dispatch_async(queue, ^{
    // do your background stuff

    dispatch_async(dispatch_get_main_queue(), ^{
      // update the UI
    });
});
</code></pre>

<p>如果你想使用 <code>NSOperationQueue</code>,它其实很简单:</p>

<pre><code>NSOperationQueue *queue = [ init];
queue.maxConcurrentOperationCount = 1;
</code></pre>

<p>并向该串行队列添加操作:</p>

<pre><code>[queue addOperationWithBlock:^{
    // do your stuff

    [ addOperationWithBlock:^{
      // update the UI
    }];
}];
</code></pre>

<p>在回答您的 <code>NSThread</code> 问题时,根据您的描述,我认为没有必要这样做。当然没有明显的性能问题。</p>

<p>顺便说一句,您添加到调度/操作队列中的内容是否保证同步操作(即,您没有进行地理编码或类似的东西本身异步操作,是吗?)?如果它以异步方式运行,则必须格外小心。</p>

<hr/>

<p>顺便说一句,如果你只关心最近的位置,使用操作队列,你也有机会通过调用取消其他尚未开始的操作:</p>

<pre><code>;
</code></pre>

<p>正在进行的操作将首先完成(除非您输入代码来测试它是否被取消),但是在您根据最新位置发起新请求之前,可以轻松取消尚未开始的待处理操作。这仅取决于您是否真的希望<em>所有</em>顺序处理位置请求,或者您是否只想完成正在进行的请求,清除其他请求,并根据新位置排队新操作.这仅取决于您的应用程序需要什么,但通常您只关心当前位置。这可以确保您的队列不会太积压。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - CLLocationManager 和串行位置更新处理,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15044448/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15044448/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - CLLocationManager 和串行位置更新处理