Я хотел бы знать, сколько раз объект был автоматически выпущен.Я использовал цель c достаточно долго, чтобы узнать, был ли объект автоматически освобожден или нет, как правило, довольно просто, однако я постоянно вижу вопросы, связанные с памятью, и сохраняю количество.В какой-то момент ответ всегда заканчивается: «Вы не можете доверять retainCount объекта» - с этим я согласен, НО, если бы вы могли определить, сколько раз объект был автоматически выпущен, тогда вы на самом деле могли бы доверять retainCount, если вы добавили такую категорию, как:
@interface NSObject (NSObject_MemoryDebugging)
- (NSUInteger) autoReleaseCount;
- (NSUInteger) retainCountWithAutoRelease;
@end
@implementation]
/** Determine how many times this object has been marked for autorelease **/
- (NSUInteger) autoReleaseCount;
{
// ??? not sure how to figure this out.
return 0;
}
- (NSUInteger) retainCountWithAutoRelease
{
NSUInteger retainCount = [self retainCount];
NSUInteger autoReleaseCount = [self getAutoReleaseCount]; // ???
return retainCount - autoReleaseCount;
}
@end
По-прежнему будет исключение для неизменяемых типов, поскольку они обычно увеличивают количество сохраняемых файлов во время копирования, поэтому вы по-прежнему не можете доверять retainCountна тех.
Что я НЕ предлагаю
Я не ищу этот ответ, чтобы использовать retainCount в производственном коде.Тем не менее, я вижу, что это полезно для кого-то, чтобы отладить проблемы с памятью.
Я предполагаю, что некоторые люди ненавидят этот вопрос, так как программистам не нужно заботиться о том, сколько раз объект был выпущен автоматически.Кодирование должно быть связано с балансировкой ассигнований, сохранением, копированием, новым выпуском, окончанием историиТем не менее, смысл этого в том, чтобы помочь людям, стучащим головой.[NSObject retainCount]
сжигает много людей, и ответ на этот вопрос был бы довольно клевым.
Я уверен, что есть способ определить, сколько раз объект был выпущен автоматически.Я просто не знаю, что это, поэтому вопрос.
См. Аналогичный вопрос: Объекты внутри NSAutoreleasePool в target-c .
Редактировать
Спасибо всем за ваши ответы.Вы можете найти это интересным => Ариэль отметил, что реализация Какао в GNUStep и, в частности, NSAutoReleasePool имеет такой метод: + (NSUInteger) autoreleaseCountForObject: (id) anObject .Этот метод медленный и возвращает только счет автоматического выпуска из NSAutoReleasePools в потоке вызывающих.Тем не менее ... Интересно, что его там.В документах говорится, что это действительно полезно только для отладки.Это действительно то, что я надеялся найти (или найти возможным) как-то в среде Какао.
Я согласен с ответами, данными, что, даже если бы было возможно получить счет автоматического выпуска, что существуют лучшие инструменты (Зомби,Утечки, статический анализатор).