何时将委托设置为NULL

时间:2011-05-18 21:43:08

标签: cocoa-touch memory-management delegates

我在这里阅读了提示in a SO best practices posting

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

- (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];
}

1 个答案:

答案 0 :(得分:0)

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