2010-08-05 142 views
1

下面的代码让我的应用程序慢如蜗牛(这会导致内存泄漏,我认为):CALayer导致内存泄漏?

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];应该是解决方案,但问题仍然存在。有没有人有想法解决这个问题?

非常感谢!

回答

0

我有类似的问题,我用CALayer创建一个自定义cornerRadius等按钮,然后将其添加到一个UITableViewCell,当我滚动tableView,仪器显示内存越来越高,和应用程序越来越慢。 关于解决这个问题的方法,我没有一个好主意,但我认为你可以制作一个合适的图像。这是我认为最简单的方式。

1

你在哪里调用这段代码。它被称为很多?例如像tableview。

它没有语法错误,但它不正确。你创建的图层什么都不做。在本节中,您还将为每次运行创建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; 

不知道你在哪里使用此代码这是你能做的最。