CALayer вызывает утечки памяти? - PullRequest
1 голос
/ 05 августа 2010

следующий код делает мое приложение медленным, как улитка (я думаю, это вызывает утечку памяти):

CALayer *layer = [[CALayer layer] retain]; 
detailcell.layer.borderColor = [UIColor grayColor].CGColor;
detailcell.layer.borderWidth = 2;
detailcell.layer.shadowColor = [UIColor blackColor].CGColor;
detailcell.layer.shadowOpacity = 1.0;
detailcell.layer.shadowRadius = 5.0;
detailcell.layer.shadowOffset = CGSizeMake(0, 3);
detailcell.layer.cornerRadius = 20;
detailcell.clipsToBounds = NO;
[layer release];

"Detailcell" - это UIView, и я создаю границу и тень. Если я опущу код, мое приложение работает отлично. После исследования проблемы через Интернет, CALayer *layer = [[CALayer layer] retain]; должно быть решением, но проблема все еще существует. у кого-нибудь появилась идея решить проблему?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 24 декабря 2010

Куда вы звоните по этому коду.Где-то это часто называют?например, как просмотр таблицы.

Синтаксис неверен, но неверен.И слой, который вы создаете, ничего не делает.Вы также создаете 10 дополнительных вызовов obj-c при каждом запуске в этом разделе.

попробуйте это и посмотрите, увеличится ли скорость.

CALayer *layer = detailcell.layer; 
layer.borderColor = [UIColor grayColor].CGColor;
layer.borderWidth = 2;
layer.shadowColor = [UIColor blackColor].CGColor;
layer.shadowOpacity = 1.0;
layer.shadowRadius = 5.0;
layer.shadowOffset = CGSizeMake(0, 3);
layer.cornerRadius = 20;
detailcell.clipsToBounds = NO;

Не зная, где вы используете этокод, который вы можете сделать больше всего.

0 голосов
/ 24 декабря 2010

У меня похожая проблема, я использовал CALayer для создания кнопки с пользовательским cornerRadius и так далее, затем добавил ее в UITableViewCell, и когда я прокручиваю tableView, память, показанная в Instruments, становится все выше и выше, и приложение становился все медленнее и медленнее. О решении этого решения у меня не очень хорошая идея, но я думаю, что вы можете сделать подходящее изображение вместо этого. Я думаю, это самый простой способ.

...