Действительно ли безопасно переопределить 'выпуск' для отладки?

Иногда я должен узнать, будет ли объект действительно выпущен. Я мог использовать Инструменты, конечно, но это занимает время, и я должен искать в миллионы объектов, таким образом, я раньше делал это:

-(void)release {
    NSLog(@"I'm released");
    [super release];
}

Но проблема: действительно ли это безопасно сделать? Я могу получить какие-либо проблемы, когда я переопределяю -(void)release. Кроме того, это действительно void? И что, если я создаю свое приложение для распределения, но на несчастный случай, оставляют его там? Или это просто безопасно?Спасибо

7
задан 19 April 2010 в 14:11
поделиться

2 ответа

Это нормально, но, пожалуйста, ограничьте его только для отладки.


Это не недействительно , а одностороннее недействительное .

-(oneway void)release {
    NSLog(@"I'm released"); // <-- remeber the @.
    [super release];
}

Обратите внимание, что если вы переопределите это только для NSObject, то сообщения -release , отправленные в «бесплатные мостовые контейнеры» (например, NSCFArray и т. Д.), Будут пропущены, поскольку они также переопределили -релиз для пересылки на CFRelease .

19
ответ дан 6 December 2019 в 07:25
поделиться

Сообщение о выпуске только уменьшает счетчик ссылок экземпляра.

Если вы хотите узнать, был ли выпущен экземпляр, лучше всего переопределить сообщение об освобождении:

- (void)dealloc {
    NSLog(@"I am deallocated");
    [super dealloc];
}

Используйте его с умом.

5
ответ дан 6 December 2019 в 07:25
поделиться
Другие вопросы по тегам:

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