Я только что закончил избавление моего проекта от утечек, но в категории «GeneralBlock-0» все еще есть тысячи объектов. Количество чистых распределений находится на пределе (оно приближается к миллиону, как я печатаю), но ни один из них не является утечкой, и ни один из них не имеет размера больше 0 байтов.
ОБНОВЛЕНИЕ И РЕДАКТИРОВАНИЕ:
QuartzCore отвечает за все оскорбительные объекты.
Ответственные абоненты (в порядке выполнения за итерацию игрового цикла:
-[CALayer setPosition:]
x_hash_table_new_ // x2
hash_table_modify
-[CALayer setPosition:] // x9
-[CALayer(CALayerPrivate)_copyRenderLayer:flags:] //x13
При запуске на устройстве объекты размером 48 байт выделяются в соответствии с GeneralBlock-64, 128, 256 и т. Д. С такими же свойствами, как описано выше. Это является недопустимым, поскольку оно, очевидно, вызывает значительное замедление.
Вот в каком коде моего проекта прослеживается проблема:
topRow.center = CGPointMake(topRow.center.x,topRow.center.y-PIXELS_PER_FRAME);
while (nextRow = thisTopRow.below) { //stops running when thisTopRow.below is nil
nextRow.center = CGPointMake(nextRow.center.x,nextRow.center.y-PIXELS_PER_FRAME);
if (nextRow.center.y+20 < 401 && !nextRow.userInteractionEnabled)
[nextRow enableInteraction];
thisTopRow = nextRow;
}
У меня сложилось впечатление, что CGPoint является типом и будет освобожден в конце блока кода. Почему это наполняет мою память? Если дело доходит до этого, я загружу файл трассировки, который я сохранил в инструментах, для всех, кто заинтересован, но я почти уверен, что охватил все.