Должны ли я беспокоиться о тысячах новых объектов 0 размера, добавляемых к моему итоговому итогу каждую секунду? - PullRequest
1 голос
/ 27 июня 2009

Я только что закончил избавление моего проекта от утечек, но в категории «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 является типом и будет освобожден в конце блока кода. Почему это наполняет мою память? Если дело доходит до этого, я загружу файл трассировки, который я сохранил в инструментах, для всех, кто заинтересован, но я почти уверен, что охватил все.

Ответы [ 3 ]

1 голос
/ 28 июня 2009

Предполагая, что вы можете дублировать поведение в симуляторе, убедитесь, что RSIZE вашего приложения также не увеличивается, используя 'top -u' в терминале.

Это наиболее вероятно, потому что QuartzCore внедрил свой собственный распределитель и зону выделения, но не полностью подключен к механизму сбора статистики, который использует Instruments.

Пожалуйста, сообщите об ошибке.

0 голосов
/ 15 июля 2009

Я тоже занимаюсь этой проблемой. Я использую UIScrollView с некоторыми UIImageViews внутри него, и каждый раз, когда изменяется смещение представления прокрутки, происходит вызов - [CALayer (CALayerPrivate) _copyRenderLayer: flags:] выполняется, что увеличивает память на 48 байт.

Опять же - на симуляторе это записывается как 0 байт, но на моем устройстве оно постоянно пожирает мою память.

0 голосов
/ 15 июля 2009

Та же проблема ... Нулевые байты выделяются в симуляторе, но в устройстве для каждого вызова метода в CALayer увеличивается моя память на 48 байтов.

Это приводит к проблемам с памятью.

Мурали.

...