图片加载优化 港控/mmm° 2022-01-12 15:37 331阅读 0赞 图片的显示分为三步:加载、解码、渲染。 加载:CPU,未解码的压缩数据image 解码:UIKit,赋值时imageView.image = image进行解码变成RGB颜色数据,CPU和内存负载瞬间增长,CPU处理(与图片宽高成正比) 渲染:UIKit 图片加载方式不同,性能也大不一样,通常使用的加载方式有:`imageNamed`和`imageWithContentsOfFile`。 1、UIImage \*image = \[UIImage imageNamed:@“xxx”\]; 首次加载图片成功后会缓存在内存中,直到应用程序能出才会释放内存。 多次使用时,避免重新加载,速度快;内存会一直被占用,图片数量多了,会造成页面卡顿 使用场景,适用于图片数量少,且图片小(宽x高) 2、NSString \*filePath = \[\[NSBundle mainBundle\] pathForResource:@“xxx” ofType:@“png”\]; UIImage \*image = \[UIImage imageWithContentsOfFile:filePath\]; 图片加载成功后,不会缓存到内存。 每次使用都会重新进行加载;被占用内存随使用对象的释放而释放。 使用场景,适用于大图(宽x高)加载。 3、UIImageView \*imageView = \[\[UIImageView alloc\] initWithFrame:CGRectMake(10.0, 10.0, 120.0, 120.0)\]; imageView.image = image; 消耗内存 imageNamed时,第一次读取的图片保存到缓冲区, 然后永不销毁. 如果这个图片过大, 占用几百 kb, 这一块的内存将不会释放, 必然导致内存的浪费, 而且这个浪费的周期与APP的生命周期同步;imageWithContentsOfFile则不会。 ![imageNamed加载并显示][imageNamed] ![imageNamed加载不显示][imageNamed 1] ![imageWithContentsOfFile加载不显示][imageWithContentsOfFile] ![imageWithContentsOfFile加载并显示][imageWithContentsOfFile 1] [imageNamed]: /images/20220112/b0a3d2c0a6744355b290c68f34af357b.png [imageNamed 1]: /images/20220112/897e33a2d9724e5b96c62e89f3321c92.png [imageWithContentsOfFile]: /images/20220112/f87fb32c72d647f7a8290321c890cd69.png [imageWithContentsOfFile 1]: /images/20220112/dfde3d0fa5334417ae602eb417706098.png
还没有评论,来说两句吧...