在CALayer中使用UIImage会有性能影响吗?
-
03-07-2019 - |
题
我正在使用一大堆CALayers,创建一个基于图块的图像,与GoogleMaps(不同版本的同一图像具有更多/更少细节)不同。
我用来执行此操作的代码是:
UIImage* image = [self loadImage:obj.fileName zoomLevel:obj.zoomLevel];
[CATransaction setValue:(id)kCFBooleanTrue
forKey:kCATransactionDisableActions];
obj.layerToAddTo.contents = [image CGImage];
[CATransaction commit];
我真的不想使用CoreGraphics从文件加载CGImage,因为我很懒。但是如果有很大的性能提升我会的! LoadImage只是修改了一个字符串来获取加载所述图像的正确路径,而obj是一个NSObject-struct,它包含了我需要的所有信息。
帮助?
解决方案
没有太大的性能提升 - 如果有的话,那就相反了。通过UIImage加载你的图像,你将获得它为你做的缓存的所有好处,它将是一个非常快速的小动物与你的各种CALayers一起使用。
其他提示
我只是尝试了这个并使用纯CoreGraphics加载图像而不是使用UIImage在一次加载许多图像时显着提高了速度。
“我刚试过这个并且使用纯CoreGraphics来加载图像而不是使用UIImage在一次加载许多图像时显着提高了速度。”
你是如何避免使用UIImage的?或者更确切地说,如何在不通过UIImage的情况下将图像文件直接加载到CoreGraphics中?
不使用 UIImage -imageNamed:
来加载图像的一个原因是它们存储在内部缓存中,并且在低内存情况下不会清除该缓存。
我没有明确的答案,但我猜你在使用UIImage时看到的加载时间比你在使用CGImage时看到的要慢。使用CGImage,您可以在创建过程中指定图像类型(jpg或png),但使用UIImage时,需要动态确定对象类型。不可否认,这可能就像查看图像文件的前几个字节一样简单,但可能不是。
一旦图像实际使用,我不会想到使用内部表示UIImage的CGImage与使用自己创建的CGImage之间存在任何差异。我认为它们完全相同。