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

objective-c - Objective c - 对 dealloc 委托(delegate)的调用方法


                                            <p><p>我有一个对象 <code>Person</code> 和一个协议(protocol) <code>PersonDelegate</code><br/>
<code>Person</code> 有一个 <code>@property (assign) id<PersonDelegate> 委托(delegate)</code>; </p>

<p>在我的代码中的某个地方:</p>

<pre><code>Person *newPerson = [ init];
newPerson.delegate = theDelegate;
...
; // and dealloc

...

now Person has some new information for the delegate, so I call in Person
;
</code></pre>

<p>但后来我得到 EXC_BAD_ACCESS </p>

<p>这是因为委托(delegate)已经解除分配了吗? Person 怎么知道他的委托(delegate)是 dealloc? </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的委托(delegate)属性未设置为保留,因此一旦您这样做,它就会变坏 <code>;</code></p>

<p>通常,委托(delegate)<em></em>设置为分配,以避免循环引用。但在这种情况下,委托(delegate)本身通常已经保留了对其委托(delegate)的对象的引用。</p>

<p>即。</p>

<pre><code>Person *newPerson = [ init];
;
newPerson.delegate = self;
;
</code></pre>

<p>所以 <code>self.people</code> 保留了所有创建的 <code>persons</code> 并且那些 <code>persons</code> 都指向 <code>self</code> 作为他们的委托(delegate)</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - Objective c - 对 dealloc 委托(delegate)的调用方法,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/10786328/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/10786328/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - Objective c - 对 dealloc 委托(delegate)的调用方法