菜鸟教程小白 发表于 2022-12-12 11:31:58

ios - 单例方法停止 iOS 中的代码执行


                                            <p><p>我有一个类似于 <a href="https://stackoverflow.com/questions/14192140/code-execution-stops-on-using-thread-safe-singleton-initialization-code" rel="noreferrer noopener nofollow">this post</a> 的问题,但这个答案对我不起作用。</p>

<p>我的应用中有一个单例,我以前是这样创建的:</p>

<pre><code>static POGalleryManager* defaultManager = nil;

+(POGalleryManager*)defaultManager
{
    if (!defaultManager) {
      defaultManager = [ init];
    }

    return defaultManager;
}

+(id)allocWithZone:(NSZone *)zone
{
    return ;
}
</code></pre>

<p>这工作正常,所以我尝试变得聪明并使用 GCD 来确保线程安全,切换到这个应该会更好:</p>

<pre><code>+(POGalleryManager*)defaultManager
{
    static POGalleryManager* __manager = nil;
    dispatch_once_t onceToken;
    dispatch_once(&amp;onceToken, ^{
      __manager = [ init];
    });

    return __manager;
}
</code></pre>

<p>第一次调用它时,一切都很好。第二次这样调用:</p>

<pre><code>[ someMethod];
</code></pre>

<p>someMethod 永远不会被调用。我尝试使用调试器进入该行,一旦它到达 dispatch_once 行,它就会继续执行(即,它把我踢出调试器 - 所以线程可能死了?)。 </p>

<p>对此有何建议?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>尝试切换</p>

<pre><code>dispatch_once_t onceToken;
</code></pre>

<p>为</p>

<pre><code>static dispatch_once_t onceToken;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 单例方法停止 iOS 中的代码执行,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/16889587/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/16889587/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 单例方法停止 iOS 中的代码执行