IOS – UIImage imageWithContentsOfFile 和 imageNamed 区别

ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> Object-C 基础

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> Object-C 线程

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> OpenGL ES

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> GPUImage

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> AVFoundation

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> CocoaPods


一.前言

《Object-C 加载 NSBundle 中图片的三种方法》文章中有介绍,使用 imageWithContentsOfFil 和 imageNamed 都可以直接加载 NSBundle 的素材文件,那么二者到底有什么区别??

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:IOS - UIImage imageWithContentsOfFil 和 imageNamed 区别
//@Time:2022/03/24 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

//UIImage 加载 NSBundle 中图片方案一
NSString *file2 = [[NSBundle mainBundle] pathForResource:@"myBundle.bundle/pic" ofType:@"png"];
UIImage *img2 = [UIImage imageWithContentsOfFile:file2];

//UIImage 加载 NSBundle 中图片方案二
UIImage *img3 = [UIImage imageNamed:@"myBundle.bundle/pic"];

二.imageWithContentsOfFile 和 imageNamed 区别

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:IOS - UIImage imageWithContentsOfFil 和 imageNamed 区别
//@Time:2022/03/27 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

// 返回的对象会保存在缓存中,只有退出程序才会释放内存;但下一次调用快
[UIImage imageNamed:@"1.png"];

// 返回的对象不会保存在缓存中,一旦对象销毁就会释放内存
NSString *path = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"png"];
// 也可以写成
// NSString *path = [[NSBundle mainBundle] pathForResource:@"1.png" ofType:nil];

[UIImage imageWithContentOfFile:path];

推荐:加载 NSBundle 文件使用 imageNamed;加载沙盒或者其他资源路径文件使用 imageWithContentOfFile;


三.imageWithContentsOfFile 和 imageNamed 踩过的坑

使用 imageNamed 加载沙盒的素材,偶尔不正常,有时候为上一次加载的素材,即路径正常,加载的素材又可能是上一次缓冲区的素材(头疼的bug)

解决办法:使用 imageWithContentOfFile 即可;

推荐:加载 NSBundle 文件使用 imageNamed;加载沙盒或者其他资源路径文件使用 imageWithContentOfFile;


四.猜你喜欢


ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
THE END
喜欢就支持一下吧
点赞1 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容