Когда я должен удалить наблюдателей? Ошибка об освобождении объектов прежде, чем удалить наблюдателей

Crontab нужен полный путь на вашем сервере.

0 0 * * * php /var/www/vhosts/domain.com/httpdocs/scripts/example.php

Это будет выполняться каждый день в полночь.

32
задан Community 23 May 2017 в 11:53
поделиться

3 ответа

Ач. Вы наблюдаете за объектом TekkPoint из объекта SomethingElse , а объект SomethingElse добавляет и удаляет наблюдателей, верно? (Это нормальный способ работы; я просто пытаюсь прояснить.)

Похоже, ваш объект TekkPoint освобождается, а SomethingElse , наблюдающий за ним, все еще вокруг. Метод освобождения SomethingElse не вызывается, потому что освобождается TekkPoint , а не SomethingElse .

Если вы планируете наблюдать за объектом который может исчезнуть до того, как исчезнет наблюдатель, тогда вам нужен способ уведомить наблюдателей, что они должны удалить своих наблюдателей.

46
ответ дан 27 November 2019 в 21:07
поделиться

Вы звоните [super dealloc] перед тем, как удалите своих наблюдателей? Слишком ранний вызов функции super dealloc может привести к подобной ошибке.

2
ответ дан 27 November 2019 в 21:07
поделиться

Нормальный код выглядит примерно так:

- (void) dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}

Дважды проверьте подпись вашего метода dealloc (цель C очень неумолима и никогда не предупредит вас, если вы напутаете вверх по названию метода). Например, если имя вашего метода было "dealoc" (с одним l), ваш dealloc никогда не будет вызван.

В противном случае отредактируйте свой вопрос, включив в него повторную процедуру dealoc.

-11
ответ дан 27 November 2019 в 21:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: