菜鸟教程小白 发表于 2022-12-13 15:38:14

ios - 如果使用动画调用 setContentOffset,UIScrollView 会崩溃


                                            <p><p>我的应用程序创建 UIView 的自定义子类的实例,并将这些实例水平放置在彼此相邻的位置。创建 UIView 类的新实例后,我可以将其添加到 UIScrollView 并重置 contentsize。然后我打电话
<code></code>.
这工作得很好。
问题是当我用动画调用上述方法时,即
<code></code>
,应用程序崩溃。
调用堆栈如下所示:</p>

<pre><code>&gt; #0    0x3145b870 in ___forwarding___ ()
&gt; #1    0x313b6650 in _CF_forwarding_prep_0 ()
&gt; #2    0x317d84a2 in - ()
&gt; #3    0x317d84a2 in - ()
&gt; #4    0x317d7f0e in - ()
&gt; #5    0x317d7e00 in - ()
&gt; #6    0x3531d86e in CA::Display::DisplayLink::dispatch(unsigned long long, unsigned long long) ()
&gt; #7    0x3531d7c4 in CA::Display::IOMFBDisplayLink::callback(__IOMobileFramebuffer*,
&gt; unsigned long long, unsigned long long, unsigned long long, void*) ()
&gt; #8    0x33a56000 in IOMobileFramebufferVsyncNotifyFunc ()
&gt; #9    0x36e3c60c in IODispatchCalloutFromCFMessage ()
&gt; #10   0x31422f12 in __CFMachPortPerform ()
&gt; #11   0x3142d522 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
&gt; #12   0x3142d4c4 in __CFRunLoopDoSource1 ()
&gt; #13   0x3142c312 in __CFRunLoopRun ()
&gt; #14   0x313af4a4 in CFRunLoopRunSpecific ()
&gt; #15   0x313af36c in CFRunLoopRunInMode ()
&gt; #16   0x32888438 in GSEventRunModal ()
&gt; #17   0x316b4cd4 in UIApplicationMain ()
</code></pre>

<p>当我启用 Zombies 时,应用程序输出会产生:</p>

<pre><code>*** -: message sent to deallocated instance 0x113dbb10
</code></pre>

<p>附加信息:UIScrollView 的委托(delegate)从未设置。我正在使用 ARC。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我发现了我的问题。
我正在从后台线程调用调用 setContentOffset 的方法。 </p>

<pre><code>BackgroundThread --&gt; My random processing method --&gt; Setup new UIView and add it to UIScrollView --&gt; Call setContentOffset with animations
</code></pre>

<p>上述流程导致崩溃。当我从主线程调用相同的处理方法时,它工作得很好。 </p>

<p>显然 iOS 不喜欢从后台线程调用动画。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如果使用动画调用 setContentOffset,UIScrollView 会崩溃,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/11939016/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/11939016/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如果使用动画调用 setContentOffset,UIScrollView 会崩溃