ios imageWithContentsOfFile:path 图片不显示

来源:互联网 发布:bluecloud 新域名 编辑:程序博客网 时间:2024/05/05 22:25

1.方法+ (nullable UIImage )imageNamed:(NSString )name;
可能产生的问题:

// load from main bundle,此时图片@1x必须在main bundle中,否则不可以取到[UIImage imageNamed:@"图片@1x"];

2.方法+ (UIImage )imageWithContentsOfFile:(NSString )path;
可能产生的问题:

//此时在ios7中必须要加后缀.png,否则无法显示。[UIImage imageWithContentsOfFile:[[[NSBundle mainBundle]resourcePath]stringByAppendingString:@"图片@1x.png"]];//2或者直接用下边这个方法,防止错误.[UIImage imageWithContentsOfFile: [[NSBundle mainBundle]pathForResource:@"图片@1x" ofType:@"png"]];

3.注意下图中“Create groups”和“Create folder references”的区别:

  • “Create groups”生成的黄色文件夹(区分点),并不产生真正意义上的文件夹。在Xcode中分文件夹,但是在Bundle中所有素材都在同一个文件夹下,开发效率很高,因此,不能出现文件重名的情况,可以直接使用[NSBundle mainBundle]作为资源路径,效率高!可以使用[UIImage imageNamed:]加载图像。
  • “Create folder references”生成蓝色文件夹(特点),产生真正意义上的文件夹。那么Xcode中分文件夹,Bundle中同样分文件夹,因此,可以出现文件重名的情况,那么需要在[NSBundle mainBundle]的基础上拼接实际的路径,效率较差!且不能使用[UIImage imageNamed:]加载图像

这里写图片描述

4.imageWithContentsOfFile:path和imageNamed的区别

  • (UIImage )imageWithContentsOfFile:(NSString )path

通过加载指定路径(全路径)中的文件,查找加载图像数据,从而生成并返回一个图形对象(或者 nil),但是仅仅是加载出图像的对象,并不缓存这个图形对象。

  • (UIImage )imageNamed:(NSString )name

返回的是图形对象(或者nil),且有缓存,如果这个图是第一次被加载,那么这个方法会去app 的主包里通过 name寻找这个图片

  • (UIImage )imageNamed:(NSString )name inBundle:(NSBundle *)bundle
    compatibleWithTraitCollection:(UITraitCollection *)traitCollection

参数分别是图片名字,图片在的包,用来描述希望生成的图的特征的集合。这三个参数的此方法是 IOS8的新特性!如果找不到匹配的就返回 nil。成功生成图片对象之后,如果在内存里这个生成的图片缓存不存在了,那么这个方法还是会去磁盘或者其他资源里定位并加载这个图片数据,返回。故,缓存一直存在

应用场景:
总得来说,使用大的图片,如果不是常用,那么用 imagewithcontentsoffile 方法,比较小的(比如图标),需要经常使用的,那么用后者,imageNamed 加载。内存常驻,效率高。不过,就如 tomcat 里,那么多图片,一起用 imagenamed 加载,很容易内存泄露,程序崩溃,还需要及时关闭动画,清除图片数组等措施。

5 ios 中文件目录

 5.1 [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]
  • 模拟器
    /Users/**/Library/Developer/CoreSimulator/Devices/2F24997B-9943-4D70-9DCF-55F9247642C1/data/Containers/Data/Application/EE643C79-E6B9-4E60-80D4-3BE907D71092/Library/Caches
  • 真机
    /var/mobile/Containers/Data/Application/17E12BC4-B154-454A-BEEF-C86363C8FBC7/Library/Caches
5.2  [NSString stringWithFormat:@"%@/Library/Caches",NSHomeDirectory()];
  • 模拟器
    /Users/**/Library/Developer/CoreSimulator/Devices/2F24997B-9943-4D70-9DCF-55F9247642C1/data/Containers/Data/Application/EE643C79-E6B9-4E60-80D4-3BE907D71092/Library/Caches
  • 真机
    /var/mobile/Containers/Data/Application/17E12BC4-B154-454A-BEEF-C86363C8FBC7/Library/Caches
5.3  [[NSBundle mainBundle]resourcePath]
  • 模拟器
    /Users/**/Library/Developer/CoreSimulator/Devices/2F24997B-9943-4D70-9DCF-55F9247642C1/data/Containers/Bundle/Application/8B0747CB-7D91-4432-BA8D-A7232FC93901/me.app
  • 真机
    /private/var/mobile/Containers/Bundle/Application/D445AE69-A207-4B37-AF1F-0F48E71B3E11/me.app

NSHomeDirectory()与 [NSBundle mainBundle]区别:

/data/Containers/Data/ 和 /data/Containers/Bundle/ 两个不同的文件夹

参考:
1.UIImage 的imageWithContentsOfFile:path和imageNamed的区别
2. iOS UIImage不显示JPEG图像iOS UIImage not displaying JPEG images
3.UITraitCollection Class Reference

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕期肛裂出血怎么办 带环腰特别疼怎么办 市公务员被定邢事拘留怎么办 四年级数学差生怎么办 给学生讲错题了怎么办 高中作弊被通报怎么办 没收到电子发票怎么办 皇冠草叶子发黄怎么办 脚痒怎么办小窍门 孩子天天玩手机怎么办 征信大数据花了怎么办 衣服容易有水印怎么办? ps楷体有锯齿怎么办 报表打印需要jre怎么办 考试忘记写名字怎么办 ems明信片没收到怎么办 580escl解锁失败怎么办 留学回国人员证明怎么办 员工不签劳动合同怎么办 在日本怎么办韩国签证 在新疆怎么办英国签证 安徽省会考没过怎么办 初中要会考了怎么办 担保人卡被冻结怎么办 188a转永居失败怎么办 刷机忘了id密码怎么办 在澳大利亚怎么办白卡 外国的工作签证怎么办 北京去澳门怎么办签注 专科挂科毕业证怎么办 新西兰预科成绩不合格怎么办 私立转公立学籍怎么办 法国留学拒签怎么办 法国留学签证被拒怎么办 英国留学拒签怎么办 在普高出国怎么办 副高职称不让出国怎么办 没学位现场确认怎么办 香港master挂科怎么办 香港研究生挂科怎么办 加拿大研究生绩点刚合格怎么办