NSBundle介绍:它是一个单例类,用来加载资源

bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBundle.

我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别. 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫做程序的main bundle

bundle中的有些资源可以本地化.例如,对于foo.nib,我们可以有两个版本: 一个针对英语用户,一个针对法语用户. 在bundle中就会有两个子目录:English.lproj和French.lproj,我们把各自版本的foo.nib文件放到其中. 当程序需要加载foo.nib文件时,bundle会自动根据所设置的语言来加载. 我们会在16章再详细讨论本地化

通过使用下面的方法得到程序的main bundle
NSBundle *myBundle = [NSBundle mainBundle];

一般我们通过这种方法来得到bundle.如果你需要其他目录的资源,可以指定路径来取得bundle
NSBundle *goodBundle;
goodBundle = [NSBundle bundleWithPath:@"~/.myApp/Good.bundle"];

一旦我们有了NSBundle 对象,那么就可以访问其中的资源了
// Extension is optional
NSString *path = [goodBundle pathForImageResource:@"Mom"];
NSImage *momPhoto = [[NSImage alloc] initWithContentsOfFile:path];

bundle中可以包含一个库. 如果我们从库得到一个class, bundle会连接库,并查找该类:
Class newClass = [goodBundle classNamed:@"Rover"];
id newInstance = [[newClass alloc] init];

如果不知到class名,也可以通过查找主要类来取得
Class aClass = [goodBundle principalClass];
id anInstance = [[aClass alloc] init];

可以看到, NSBundle有很多的用途.在这当中, NSBundle负责(在后台)加载nib文件. 我们也可以不通过NSWindowController来加载nib文件, 直接使用NSBundle:
BOOL successful = [NSBundle loadNibNamed:@"About" owner:someObject];
注意噢, 我们指定了一个对象someObject作为nib的File's Owner

使用initWithContentsOfFile时,文件路径的写法 使用initWithContentsOfFile方法可以通过读取一个文件的内容来初始化对象。 但文件的路径应该怎么确定呢? 可以使用NSBundle的对象来获取。 例如当前程序所在目录下有个文件re.xml,我们要将该文件的内容做为NSData的数据源来初始化一个NSData对象,可以用下面的方法来实现:
NSString *filePath = [[NSBundle mainBundle] pathForResouse:@"re" ofType:@"xml”];NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];
读取plist中的内容:
NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
self.data = [NSArray arrayWithContentsOfFile:dataPath];
删除本地文件
NSString * thePath=[self getUserDocumentDirectoryPath];
NSMutableString * fullPath=[[[NSMutableString alloc]init]autorelease];
[fullPath appendString:thePath];
NSString * idString=[idArray objectAtIndex:indexPath.row];
NSString * coverName=[NSString stringWithFormat:@"/%@.jpg",idString];
[fullPath appendString:coverName];
NSFileManager *defaultManager;
defaultManager = [NSFileManager defaultManager];
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error
BOOL boolValue=[defaultManager removeItemAtPath: fullPath error: nil];
if (boolValue) {
NSLog(@"remove cover image ok");
}
- (NSString*)getUserDocumentDirectoryPath {
NSArray* array = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask,YES);
if([array count])
return [array objectAtIndex: 0];
else return @"";
}

总结:
在此记录一下:在以后的开发中不直接使用任何相对路径,而是使用经过计算以后的绝对路径。 

一.获取图片

1.   NSString *path = [[NSBuddle mainBuddle] pathForResource:@"resourceName"   

            oftype@"resourceType”];

      UIImage *image = [[UIImage imageWithContentsOfFile:path];

2.   UIImage *image = [UIImage imageNamed:@"imageName”];

  加载图片:

  1. //方法1
  2. UIImage *imag1 = [UIImage imageNamed:@"image.png"]; //这种方式加载图片会缓存,下次用的时候不用再加载,但是缺点是应用程序占用内存。
  3. //方法2
  4. //很好的解决了内存缓存的问题
  5. UIImage *image2 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]];
  6. //方法3
  7. //很好的解决了内存的缓存问题
  8. NSData *imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]];
  9. UIImage *image3 = [UIImage imageWithData:imageData];

二.获取plist文件

NSArray *array =[[NSArray alloc]initWithContentsOfFile:[[NSBundlemainBundle]pathForResource:@"name"ofType:@"plist"]];

NSDictionary *dict=[arrayobjectAtIndex:index];//将plist文件中的内容转换成字典

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4762861.html,如需转载请自行联系原作者

iOS:NSBundle的具体介绍相关推荐

  1. Visual Studio跨平台开发实战(2) - Xamarin.iOS基本控制项介绍

    原文 Visual Studio跨平台开发实战(2) - Xamarin.iOS基本控制项介绍 前言 在上一篇文章中, 我们介绍了Xamarin 以及简单的HelloWorld范例, 这次我们针对iO ...

  2. iOS KVO和KVC介绍

    iOS KVO和KVC介绍 KVO和KVC都是基于对NSObject的扩展来实现的,所有继承于NSObject的子类都能使用KVO和KVC. 用来测试的model: @interface User : ...

  3. iOS开发基础篇——介绍C++内置函数

    学习iOS开发,那么就一定要掌握C的部分,今天的内容是C++内置函数的部分,一起来学习一下吧! 调用函数时需要一定的时间和空间的开销,过程如下: 这只是一个参考! C++提供一种提高效率的方法,即在编 ...

  4. iOS多线程各种安全锁介绍 - 线程同步

    一.atomic介绍 github对应Demo:https://github.com/Master-fd/LockDemo 在iOS中,@property 新增属性时,可以增加atomic选项,ato ...

  5. iOS企业证书申请介绍

    iOS企业证书可以免上架App Store安装到手机使用 需要企业账号才能申请 企业账号申请介绍 一.iOS企业发布证书申请 1.登录Appuploader选择Certification 2.选择iO ...

  6. IOS sqlite3 使用简单介绍 使用简单介绍

    iPhone中支持通过sqlite3来访问iPhone本地的数据库. 具体使用方法如下 1:添加开发包libsqlite3.0.dylib 首先是设置项目文件,在项目中添加iPhone版的sqlite ...

  7. 宜人贷-iOS客户端组件化介绍

    文章简介: 本文将从三个方面讲解我们组件化项目.第一部分,我们将介绍组件化的意义和业内组件化的进程:第二方面我们将具体介绍组件化所使用的技术,以及组件化过程中所面对的问题:而第三方面,我们会展示我们组 ...

  8. 【转】iOS平台安装包介绍

    目前 iOS 平台上常见的安装包有三种:deb.ipa 和 pxl. deb格式 deb 是 Unix 系 统(其实主要是 Linux )下的安装包,基于 tar 包,因此本身会记录文件的权限(读/写 ...

  9. iOS NSBundle常用方法及解释

    1.使用类方法创建一个NSBundler对象 + (NSBundle *)mainBundle; eg: [NSBundle mailBundle]; 2.使用路径获取一个NSBundle对象,这个路 ...

最新文章

  1. python鸢尾花数据集聚类_R语言鸢尾花iris数据集的层次聚类分析
  2. java 32 questions
  3. 音乐社交APP源码ios版
  4. php memcache 64,PHP 5.3.13 memcache win 64 配置和安装
  5. Windows EC2 Instance 忘记密码如何重置
  6. php 的点代表什么意思,linux .(点)是什么意思
  7. 部署AdminLTE
  8. 雨林木风 Ylmf Linux Y1.5(Ubuntu 9.10)发行版正式发布
  9. #paypay付款测试#
  10. ZooKeeper性能测试
  11. c语言程序设计模拟卷视频,《C语言程序设计》模拟试卷A卷.doc
  12. efi分区能不能删除 win10_Win10删除了EFI分区:以下是恢复它的方法
  13. JQuery实现shift键多选
  14. jmap和jstat
  15. 读书 | 颠覆者:周鸿祎自传
  16. 阿里云服务器(Windows)使用IE浏览器打开网站提示“增强安全配置正在阻止来自下列网站内容”如何处理?
  17. 谷歌浏览器被恶意劫持解决方案
  18. c++模板类声明和定义的问题
  19. Navicat 连接 MySql 报错2059时的解决方法
  20. 详解 C++ STL 六大组件,看完不懂打我...

热门文章

  1. HTML5学习笔记简明版(3):新元素之hgroup,header,footer,address,nav
  2. 在DataGrid中添加一个LookUpColumn,以比较灵活地实现DictValue值代替DictID值显示.
  3. 判断SIM卡属于哪个移动运营商
  4. POJ 3461 还是两种方法
  5. Vue2.x开发饿了么项目(header部分)
  6. 《云计算:概念、技术与架构》一2.3 案例研究3:Innovartus
  7. Google API 设计指南-设计模式
  8. 一些算法入门应该明白的东西
  9. Apache 编译安装
  10. 浅析网页界面设计——首页设计