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 <NSObject>
- (void)helperDidFinishHelping:(MyHelperClass *)helper;
@end
</code></pre>
<p>/* MyHelperClass 接口(interface) */</p>
<pre><code>@interface MyHelperClass : NSObject {
__weak id <MyHelperDelegate> delegate;
}
@property(nonatomic, weak) id<MyHelperDelegate> 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 <MyHelperClassDelegate> {
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]