Что делает NSArray таким медленным доступом? - PullRequest
1 голос
/ 16 сентября 2010

Я работаю над графическим эффектом для приложения для iPhone, которое имитирует эффект плазмы с низким разрешением из старых демосценных дней.У меня есть 600 квадратов на экране, которые обновляются как можно быстрее.Так как я использую CoreGraphics (на данный момент), я могу получить очень постоянные 11FPS без замораживания -

НО, когда я пытаюсь добавить один простой просмотр NSArray, iPhone, а также симулятор зависает на несколько секундкаждые несколько секунд.Я запустил это в приборах, и он говорит, что есть утечка - утечка связана с NSAutoReleasePool, но это не очень помогает.(Я создаю NSAutoReleasePool в начале каждого кадра обновления и осушаю пул в конце.)

В процессе удаления я смог сузить его до одной строки, которая вызывает замедление.Эта строка происходит для каждого из 600 блочных спрайтов при каждом обновлении кадра:

//SLOOWWWNESS /LEAKING NSAUTORELEASEPOOL IS here (freezing every second or so)
UIColor *color = [palette objectAtIndex:colorNum];

//BUT DOESNT HAPPEN HERE... (works at full speed)
UIColor *color = [UIColor colorWithRed:0.25f green:0.25f blue:colorNum/15.0 alpha:1.0f];

... где palette - это свойство NSArray в спрайте и содержит список созданных мной объектов UIColor.Этот массив объектов UIColor создается только один раз, когда приложение запускается и все спрайты используют один и тот же массив.

У кого-нибудь есть идеи?

1 Ответ

1 голос
/ 16 сентября 2010

Что такое colorNum?Может ли быть какое-то безумное значение за пределами массива?

Является ли палитра свойством 'retain' ... объект палитры действительно сохранен, верно?Это синтезировано, или вы реализовали свой собственный метод getPalette?

...