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

ios - 弧 : Object - Delegate relationship


                                            <p><p>我正在开发一个<strong><em>启用 ARC</em></strong> 的项目。从 ViewController 我正在插入 <em>MyClass</em>,</p>

<pre><code>- (void)pushMyClass {
   MyClass *myClass = [ init];
   ;
}
</code></pre>

<p>在做了一些操作后,我正在弹出 MyClass。这里的问题是 <strong><em>MyClass 没有被释放</em></strong>。以下是类的外观。</p>

<p>/* MyHelperClassDelegate */</p>

<pre><code>@protocol MyHelperClassDelegate &lt;NSObject&gt;
- (void)helperDidFinishHelping:(MyHelperClass *)helper;
@end
</code></pre>

<p>/* MyHelperClass 接口(interface) */</p>

<pre><code>@interface MyHelperClass : NSObject {
    __weak id &lt;MyHelperDelegate&gt; delegate;
}

@property(nonatomic, weak) id&lt;MyHelperDelegate&gt; delegate;

- (void)startHelping;

@end
</code></pre>

<p>/* MyHelperClass 实现 */</p>

<pre><code>@implementation MyHelperClass

@synthesize delegate;

- (void)dealloc {
    delegate = nil;
}
</code></pre>

<p>/* 我的类(class) */</p>

<pre><code>@interface MyClass : UIViewController &lt;MyHelperClassDelegate&gt; {
    MyHelperClass *helper;
}

@implementation MyClass {

    - (void)dealloc {
      helper.delegate = nil;
    }

    - (void)getHelp {
      helper = ;
      helper.delegate = self;
      ;
    }

    - (void)helperDidFinishHelping:(MyHelperClass *)helper {
    }
}
</code></pre>

<p><em>MyHelperClass</em> 使用 <em>NSMutalbleURLRequest</em> 和 <em>NSURLConnection</em> 调用 Web 服务以获取一些数据并将其保存为用户默认值。</p>

<p>这里需要注意的一点是,如果我对 <em>helper.delegate = self;</em> 行进行注释,那么 MyClass 将被释放。</p>

<p>当 MyClass 从导航 Controller 中弹出时,如何使 MyClass 被释放?</p>

<p>谢谢。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的委托(delegate)代码看起来是正确的(除了您使用了 ivar,您没有显示 @synthesize,因此您可能同时拥有 _delegate 和委托(delegate))。很可能是其他东西保留了 MyClass。我建议您将 NSLog 添加到您的 MyClass dealloc。然后按下它,然后立即按下返回按钮,看看它是否已被释放。如果不是,那么仔细看看你在 viewDidLoad 等人中做了什么,并开始注释掉该代码的部分,直到你可以得到 dealloc。 </p>

<p>另外,我假设您没有在推送 MyClass 对象的类中保留强引用。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 弧 : Object - Delegate relationship,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15954889/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15954889/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 弧 : Object - Delegate relationship