Иногда я должен узнать, будет ли объект действительно выпущен. Я мог использовать Инструменты, конечно, но это занимает время, и я должен искать в миллионы объектов, таким образом, я раньше делал это:
-(void)release {
NSLog(@"I'm released");
[super release];
}
Но проблема: действительно ли это безопасно сделать? Я могу получить какие-либо проблемы, когда я переопределяю -(void)release
. Кроме того, это действительно void
? И что, если я создаю свое приложение для распределения, но на несчастный случай, оставляют его там? Или это просто безопасно?Спасибо
Это нормально, но, пожалуйста, ограничьте его только для отладки.
Это не недействительно
, а одностороннее недействительное
.
-(oneway void)release {
NSLog(@"I'm released"); // <-- remeber the @.
[super release];
}
Обратите внимание, что если вы переопределите это только для NSObject, то сообщения -release
, отправленные в «бесплатные мостовые контейнеры» (например, NSCFArray и т. Д.), Будут пропущены, поскольку они также переопределили -релиз
для пересылки на CFRelease
.
Сообщение о выпуске только уменьшает счетчик ссылок экземпляра.
Если вы хотите узнать, был ли выпущен экземпляр, лучше всего переопределить сообщение об освобождении:
- (void)dealloc {
NSLog(@"I am deallocated");
[super dealloc];
}
Используйте его с умом.