一、本地加载
imageWithName是全局,只有在内存警告时可能会释放或者杀死app,图片小且频繁使用的情况下用
imageWithData是局部的,会随着image对象释放,图片大,使用少的情况下用
二、加载优化
大图和掉帧本地图,异步获取,主线程加载
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"testImage" ofType:@"jpeg"]];
dispatch_async(dispatch_get_main_queue(), ^{
//业务
});
});
三、解压优化
耗时解压在子线程用 CGBitmapContextCreate 进行解压
四、超大图:
1.像素过大,需要压缩显示成完整的图片
UIGraphicsBeginImageContext(targetSize);
[originalImage drawInRect:CGRectMake(0, 0, targetSize.width, targetSize.height)];
UIImage *targetImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
2.显示超大图的局部
CGImageRef tmpImage = CGImageCreateWithImageInRect(originalImage, rect);
UIImage *targetImage = [UIImage imageWithCGImage: tmpImage];
CGImageRelease(tmpImage);
网友评论