Когда установить делегат в NULL - PullRequest
0 голосов
/ 19 мая 2011

Я прочитал подсказку здесь в SO публикуя лучшие практики :

"Если вы передаете себя в качестве делегата другому объекту, сбросьте делегат этого объекта до того, как вы освободите его." Пример:

- (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 голосов
/ 19 мая 2011

Если объект, выполняющий делегирование, может быть сохранен где-то еще, и вы не установите делегат равным nil, есть вероятность, что ваш объект может быть вызван после его dealloc, что проявится как сбой.В этом конкретном случае вы, вероятно, будете в порядке, но это, безусловно, не помешает.

...