菜鸟教程小白 发表于 2022-12-13 05:01:28

ios - iOS 中的主线程实现


                                            <p><p>我在 Objective C (iOS) 中做一些事情,但陷入了有时只会发生的崩溃。这是我的代码(在 txn 完成时被调用的 block 内)。</p>

<pre><code>      dispatch_async(dispatch_get_main_queue(), ^{
      //array which is used to show table view rows
      //someOtherArray is array which has data from response of a txn
      myArray = [ initWithArray:someOtherArray] ;
       ;
    }) ;
</code></pre>

<p>callSomeMethod 如下 </p>

<pre><code>- (void) callSomeMethod`{
dispatch_async(dispatch_get_main_queue(), ^{
    //reload tableview here
    withRowAnimation:UITableViewRowAnimationAutomatic] ;
}) ;
}
</code></pre>

<p>我的问题:
1. 在主线程中调用 mainThread 可以吗,因为这里我正在调用方法 <strong>callSomeMethod</strong> 并且我在该方法中设置了另一个主线程?</p>

<ol 开始=“2”>
<li>当我的 TableView 忙于重新加载第 0 节时,响应再次出现,并且 myArray 的内容发生了更改,因此应用程序崩溃了。</li>
</ol>

<p>感谢任何帮助。</p>

<p>非常感谢。</p>

<p>编辑:
我的确切要求是。
1.有多个部分
2.可以上下移动部分
3.有多个经常更新的txns,我会相应地更新tableview
4. 当我从服务器获得响应并改变数据源数组的内容时,重新加载 tableview 部分</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在您更新了要执行数据更新的数据后,异步调用表更新可能很危险。</p>

<p>在您的示例中,您实际上是在执行以下操作:<br/>
1) <code>myArray = [ initWithArray:someOtherArray];</code><br/>
2) 异步调度到 main<br/>
3) <code> withRowAnimation:UITableViewRowAnimationAutomatic];</code></p>

<p>说不久之后,您尝试执行以下操作:<br/>
4) <code>;</code><br/>
5) 异步调度到 main<br/>
6) <code>] withRowAnimation:UITableViewRowAnimationAutomatic];</code></p>

<p>在上面的例子中,你需要 3) 发生在 1) 之后,而不是 4) 之后。如果 3) 发生在 4) 之后,3) 的刷新将导致您想要的刷新,以及行插入。然后点击 6) 时,它将尝试插入已经插入的行,应用程序将崩溃。</p>

<p>由于您的异步调度在 2) 和 5) 上,可能会发生上述情况,其中 3) 可以在 4) 之后被调用。</p>

<p>要解决此问题,请摆脱数据更新和表刷新之间的异步调度。在上面的示例中,这将涉及删除 2) 以及它的任何其他类似实例,例如 5)。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - iOS 中的主线程实现,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/28178436/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/28178436/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - iOS 中的主线程实现