Cocoa touch 何时将委托设置为NULL

Cocoa touch 何时将委托设置为NULL,cocoa-touch,memory-management,delegates,Cocoa Touch,Memory Management,Delegates,我在这里读到一个提示: 如果要将自己作为委托传递给另一个对象,请在解除锁定之前重置该对象的委托。 例如: - (void)dealloc { if (self.someObject.delegate == self) { self.someObject.delegate = NULL; } self.someObject = NULL; [super 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];
}

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

值得注意的是,您可能应该使用nil而不是NULL。他对这件事进行了一些讨论