可可触摸 - 何时将“委托”设置为 NULL



我在SO最佳实践帖子中读到了一个提示:

"如果要将自己作为委托传递给另一个对象,请在 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,那么您的对象有可能在dealloc后被调用,这将表现为崩溃。在这种特定情况下,您可能没问题,但这样做肯定不会造成任何伤害。

最新更新