【问题标题】:When to Set Delegate to NULL何时将委托设置为 NULL
【发布时间】:2011-05-18 21:43:07
【问题描述】:

我在这里读到了一个提示in a SO best practices posting

“如果您将自己作为委托传递给另一个对象,请在解除分配之前重置该对象的委托。” 示例:

- (void)dealloc {
    if (self.someObject.delegate == self) {
        self.someObject.delegate = NULL;
    }
    self.someObject = NULL;
    [super dealloc];
}

听起来很合理,但我不确定在什么情况下我需要这样做。 例如,我有一个如下所示的视图控制器:

- (void) viewDidLoad {
    myTextField.returnKeyType = UIReturnKeyDone;
    myTextField.delegate = self;
}

在这种情况下,我是否(应该)将委托设置为 NULL,例如:

- (void) dealloc {

    if (self.myTextField.delegate == self) {
        self.myTextField.delegate = NULL;
    }
    [myTextField release];
    [super dealloc];
}

【问题讨论】:

  • 值得注意的是,您可能应该使用 nil 而不是 NULL。 This SO question有一些关于此事的讨论

标签: cocoa-touch memory-management delegates


【解决方案1】:

如果执行委托的对象可能会保留在其他地方,并且您没有将委托设置为 nil,那么您的对象可能会在它为 dealloc 之后被调用,这将表现为崩溃。在这种特定情况下,您可能会没事,但这样做肯定不会有任何伤害。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多