菜鸟教程小白 发表于 2022-12-13 16:45:17

iOS:如何处理已发布的委托(delegate)


                                            <p><p>我有一个对象用作 ViewController 和 Web 服务之间的连接层。该对象接受一个委托(delegate),并在从服务器返回数据时通知该委托(delegate)。我遇到了一个问题,即委托(delegate)在 http 请求运行时被释放。当请求返回时,我的对象尝试调用委托(delegate)上的方法并且应用程序崩溃。</p>

<p>处理此问题的最佳方法是什么。我在几个地方读到过你不应该保留你的委托(delegate),因为他们也经常保留对象,导致循环依赖。所以如果我不能保留我的委托(delegate),我如何在调用它的方法之前检查它是否已被释放?</p>

<pre><code>@property (nonatomic, assign) NSObject&lt;ServerConnectionDelegate&gt;* delegate;
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果委托(delegate)的生命周期比工作对象的生命周期长,通常你应该使用委托(delegate)模式。 (抱歉,这里的术语不正确)。</p>

<p>你有几个选项来解决这个问题:</p>

<ul>
<li>作为一种解决方法,您可以在对象的 dealloc 方法中将连接委托(delegate)设置为 nil。</li>
<li>如果需要数据(可能供以后使用),您可以使用 NSNotification 通知委托(delegate)任何连接事件,而不是委托(delegate)模式。</li>
<li>正如 Jack 在他的评论中建议的那样,您可以让您的委托(delegate)成为连接的弱属性 - 如果您的项目使用 ARC,这可能是最好的解决方案</li>
</ul></p>
                                   
                                                <p style="font-size: 20px;">关于iOS:如何处理已发布的委托(delegate),我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/12733742/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/12733742/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS:如何处理已发布的委托(delegate)