iOS:NSBundle的具体介绍
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
- UIImage *imag1 = [UIImage imageNamed:@"image.png"]; //这种方式加载图片会缓存,下次用的时候不用再加载,但是缺点是应用程序占用内存。
- //方法2
- //很好的解决了内存缓存的问题
- UIImage *image2 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]];
- //方法3
- //很好的解决了内存的缓存问题
- NSData *imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]];
- UIImage *image3 = [UIImage imageWithData:imageData];
二.获取plist文件
NSArray *array =[[NSArray alloc]initWithContentsOfFile:[[NSBundlemainBundle]pathForResource:@"name"ofType:@"plist"]];
NSDictionary *dict=[arrayobjectAtIndex:index];//将plist文件中的内容转换成字典
iOS:NSBundle的具体介绍相关推荐
- Visual Studio跨平台开发实战(2) - Xamarin.iOS基本控制项介绍
原文 Visual Studio跨平台开发实战(2) - Xamarin.iOS基本控制项介绍 前言 在上一篇文章中, 我们介绍了Xamarin 以及简单的HelloWorld范例, 这次我们针对iO ...
- iOS KVO和KVC介绍
iOS KVO和KVC介绍 KVO和KVC都是基于对NSObject的扩展来实现的,所有继承于NSObject的子类都能使用KVO和KVC. 用来测试的model: @interface User : ...
- iOS开发基础篇——介绍C++内置函数
学习iOS开发,那么就一定要掌握C的部分,今天的内容是C++内置函数的部分,一起来学习一下吧! 调用函数时需要一定的时间和空间的开销,过程如下: 这只是一个参考! C++提供一种提高效率的方法,即在编 ...
- iOS多线程各种安全锁介绍 - 线程同步
一.atomic介绍 github对应Demo:https://github.com/Master-fd/LockDemo 在iOS中,@property 新增属性时,可以增加atomic选项,ato ...
- iOS企业证书申请介绍
iOS企业证书可以免上架App Store安装到手机使用 需要企业账号才能申请 企业账号申请介绍 一.iOS企业发布证书申请 1.登录Appuploader选择Certification 2.选择iO ...
- IOS sqlite3 使用简单介绍 使用简单介绍
iPhone中支持通过sqlite3来访问iPhone本地的数据库. 具体使用方法如下 1:添加开发包libsqlite3.0.dylib 首先是设置项目文件,在项目中添加iPhone版的sqlite ...
- 宜人贷-iOS客户端组件化介绍
文章简介: 本文将从三个方面讲解我们组件化项目.第一部分,我们将介绍组件化的意义和业内组件化的进程:第二方面我们将具体介绍组件化所使用的技术,以及组件化过程中所面对的问题:而第三方面,我们会展示我们组 ...
- 【转】iOS平台安装包介绍
目前 iOS 平台上常见的安装包有三种:deb.ipa 和 pxl. deb格式 deb 是 Unix 系 统(其实主要是 Linux )下的安装包,基于 tar 包,因此本身会记录文件的权限(读/写 ...
- iOS NSBundle常用方法及解释
1.使用类方法创建一个NSBundler对象 + (NSBundle *)mainBundle; eg: [NSBundle mailBundle]; 2.使用路径获取一个NSBundle对象,这个路 ...
最新文章
- python鸢尾花数据集聚类_R语言鸢尾花iris数据集的层次聚类分析
- java 32 questions
- 音乐社交APP源码ios版
- php memcache 64,PHP 5.3.13 memcache win 64 配置和安装
- Windows EC2 Instance 忘记密码如何重置
- php 的点代表什么意思,linux .(点)是什么意思
- 部署AdminLTE
- 雨林木风 Ylmf Linux Y1.5(Ubuntu 9.10)发行版正式发布
- #paypay付款测试#
- ZooKeeper性能测试
- c语言程序设计模拟卷视频,《C语言程序设计》模拟试卷A卷.doc
- efi分区能不能删除 win10_Win10删除了EFI分区:以下是恢复它的方法
- JQuery实现shift键多选
- jmap和jstat
- 读书 | 颠覆者:周鸿祎自传
- 阿里云服务器(Windows)使用IE浏览器打开网站提示“增强安全配置正在阻止来自下列网站内容”如何处理?
- 谷歌浏览器被恶意劫持解决方案
- c++模板类声明和定义的问题
- Navicat 连接 MySql 报错2059时的解决方法
- 详解 C++ STL 六大组件,看完不懂打我...
热门文章
- HTML5学习笔记简明版(3):新元素之hgroup,header,footer,address,nav
- 在DataGrid中添加一个LookUpColumn,以比较灵活地实现DictValue值代替DictID值显示.
- 判断SIM卡属于哪个移动运营商
- POJ 3461 还是两种方法
- Vue2.x开发饿了么项目(header部分)
- 《云计算:概念、技术与架构》一2.3 案例研究3:Innovartus
- Google API 设计指南-设计模式
- 一些算法入门应该明白的东西
- Apache 编译安装
- 浅析网页界面设计——首页设计