Многократная проблема производительности CALayer - PullRequest
0 голосов
/ 10 апреля 2010

В настоящее время у меня возникают некоторые проблемы с производительностью при использовании нескольких пользовательских слоев в качестве подслоев внутри моего представления.

После программного создания моего нового слоя я добавляю его в качестве подслоя, например:

[self.view.layer addSublayer:myNewSublayer]; 

Это работает просто отлично. Однако, когда я делаю это снова и снова, мое приложение начинает все больше и больше замедляться. Я почти уверен, что это происходит, потому что я постоянно добавляю новый подслой к своему виду. Итак, чтобы решить эту проблему, я попытался удалить все из self.view.layer перед добавлением новых подслоев, например:

[self.view.layer setContents:nil];

К сожалению, это не решило мою проблему.

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

Я думаю, мне нужно найти другой способ удаления всех подслоев из слоя моего вида.

Любая помощь приветствуется. Заранее спасибо.

1 Ответ

1 голос
/ 01 февраля 2011

Если вы постоянно добавляете подслои к своему корневому слою, а не удаляете их, он будет медленным и раздуваемым. Вы используете неправильный метод для удаления подслоев:

[[self.view.layer sublayers] makeObjectsPerformSelector:@selector(removeFromSuperlayer)];

setContents: устанавливает содержимое изображения слоя (обычно через CGImageRef).

...