我们有一个相当复杂的视图层次结构,在屏幕上重复多次。为了在分配这些视图时节省资源,我们将它们渲染一次,保存到UIImage,然后将它们保存到磁盘。下次需要时,可以快速从磁盘中取出它们,而不是再次重新创建它们。我现在用于渲染视图的方法是这样的(tile是传入的UIView对象):
static CGFloat scale = -1.0;
if(scale < 0.0){
UIScreen *screen = [UIScreen mainScreen];
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) {
scale = [screen scale];
}else{
scale = 0.0;
}
}
CGSize size = CGSizeMake(100.0, 100.0);
if(scale>0.0) // handling retina display
UIGraphicsBeginImageContextWithOptions(size, NO, scale);
else
UIGraphicsBeginImageContext(size);
[tile.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *imageData = UIImagePNGRepresentation(viewImage);
success = [fileManager createFileAtPath:savePath
contents:imageData
attributes:nil];
这种方法效果很好,但它是我应用中的顶级资源。根据Instruments的说法,它在应用程序运行期间消耗了大部分时间和内存。指出的主要方法调用是UIImagePNGRepresentation。有没有更有效的方法来完成这项任务?