Последние пару дней я пытался отлаживать утечки памяти в программе target-c и пытался найти какой-то очень простой пример кода, чтобы проверить некоторые идеи, и наткнулся на то, что мне кажется ошибкой.но я хотел бы получить мнения от тех, кто имеет больше знаний, когда дело доходит до разработки в мире Mac.
У меня есть следующий фрагмент кода:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSRect desktopRect = NSZeroRect;
NSArray* screens = [[NSScreen screens] autorelease];
int x = 0;
for (x = 0; x < [screens count]; x++)
{
NSScreen *screen = [screens objectAtIndex:x];
}
[pool drain];
Этот код живет внутри методачто я звоню из цикла while, который продолжается до тех пор, пока я не завершу процесс.(Помните, что это всего лишь простой тест.)
Когда я запускаю этот цикл и наблюдаю за распределением в инструментах, все отлично работает, когда я не реализую сборщик мусора.Мое общее количество выделений остается постоянным, и все с NSScreens очищается и освобождается.
Как только я включаю сборщик мусора, вызов [экранов NSScreen] начинает пропускать основные графические объекты, как сумасшедшие, никогда не освобождаяих.
Я видел на других форумах, где люди несколько лет назад говорили о том, что Core Graphics очень утечка из-за сборки мусора.Мне интересно, так ли это и здесь.
Есть какие-нибудь мысли от сообщества?