xib分析理解

39 篇文章 0 订阅
14 篇文章 0 订阅

一、NSbundle
1.bundle(plugs-in)实例本质成员层次目录,对应托管持有着程序使用到的资源(图像/音频/编译码/nib文件等资源)。引用类NSBundle。
2.目标程序本质复杂插件包集(bundle)+成员目录。在Finder中,应用程序文件表面看和其他文件没有区别,实际上应用程序文件是包含nib文件,编译代码,及其他资源的成员目录。 这个成员目录叫做程序mainBundle。
3.托管持有着程序使用到的实例资源bundle,bundle中持有的诸多资源依据特性的不同可作不同的操作,某些资源可以本地化。xxx.nib为配置文件,为xxx.xib界面编译器画布配置某些限制说明信息并作为访问标记。比如某个foo.xib文档文件希望其在英语区和法语区分别按照相应语言区的母语呈现,则在bundle中会有两个子目录文件配置夹:English.lproj和French.lproj,对应语法的foo.nib配置文件存在于English.lproj和French.lproj文件夹中。当程序需要加载foo.nib文件时,bundle会自动根据所设置的语言来加载相应语法的foo.nib文件引入相应语法下对应的xxx.xib文档文件。
4.NSBundle *mainBundle = [NSBundle mainBundle];获得托管持有诸多资源实例的主成员名目录。
5.实例化托管持有一片堆区的过程。
6.如需要指定目录路径的bundle资源
NSBundle *goodBundle;
goodBundle = [NSBundle bundleWithPath:@“~/.myApp/Good.bundle”];
通过goodBundle实例对其托管持有的堆区进行内容访问
//path非空已查找到资源(路径为path路径)
NSString *path = [goodBundle pathForImageResource:@“Mom”];
NSImage *momPhoto = [[NSImage alloc] initWithContentsOfFile:path];
7.bundle中可以包含库包(如要获取库包中类层次模型Class)
Class newClass = [goodBundle classNamed:@“Rover”];//获取别名Rover引用类本身
//获取Rover引用类的实例
id newInstance = [[newClass alloc] init];
8.若不知道引用类Class的别名,查找主要类处理
Class aClass = [goodBundle principalClass];//主类
id anInstance = [[aClass alloc] init];//主类的实例
9.使用NSBundle实现在应用的后台加载引入nib文件资源
BOOL successful = [NSBundle loadNibNamed:@“About” owner:someObject];
指定对象someObject作为可视化nib文档文件的File’sOwner即可以通过someObject对象实现对可视化nib文档文件引入内存中的数据信息对应开辟的堆内存区访问读取/修改。使用initWithContentsOfFile方法读取文件的内容来初始化对象。
10.
NSString *filePath = [[NSBundle mainBundle] pathForResouse:@“re” ofType:@“xml”]; //Bundle中文件单元re.xml路径
NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];//读取文件的内容来初始化对象。
二、nib文档文件加载过程及File’s Owner文件物主的理解
(1).nib文档文件加载过程
1.将nib文档文件和nib文件中内嵌引用到的资源文件全部加载到内存中。
2.解析nib文件中成员名对象,对成员名对象进行实例化并初始化规则特性。(对于所有遵循着NSCoding协议的对象成员名(包括UIView和UIViewController类及子类)默认底层调用initWithCoder:初始化)。
3.重新为nib文档文件中的对象实例建立成员名连接(包括placeholder对象实例的链接)。iOS中使用mvc机制(域外成员名outlet链接机制)对文档文件中普通成员实例进行访问操作。iOS中使用addTarget:目标域实例action:目标域实例內部的函数实例forControlEvents进行关联控件动作。如果目标Target是nil,action选择器将会被响应链可选处理。
4.Bindings消息只会发送给在nib文档文件loading过程中开辟出的对象实例而不会给加载前默认的placeholderObjects发送Bindings消息。
5.分析connect链接的具体建立过程:
在xib文档文件中拖拽,不管是在File’s Owner文件物主中还是在普通Object中进行拖拽都会于xib文档文件中保持链接关系。
6.相对普通对象实例object建立的访问connect链接,其包含有链接源域外名称和目的目标对象,用ref做标记。这就是我们的IBOutLet的域外名。
xib可视化与xib相应源码
xib模式下拖拽行为的链接关系都记录在xib文档文件中。使用自定义的引用类在下面的图里面进行了描述:
自定义的引用类描述IBOutLet关联普通对象实例
IBAction关联函数操作实例

File’sOwner文件物主控制管理着可视化nib文档文件(代码loadNibNamed中的owner)。File’sOwner文件物主作为占位符,加载nib文档文件之前需要提前存在。一般将File‘sOwner设置为Controller控制器类,可使用initWithNib生成Controller控制器类对象实例携带有nib资源信息数据。UIViewController采用延迟加载nib方式(触发initWithNib函数后并不会立刻将可视化nib文档文件加载进内存中,只在需要使用view视图渲染的时候才会真正的将nib加载入内存,其实initWithNib底层还是NSBundle的loadNibNamed这个方法,此时File’sOwner文件物主是UIViewController。)File‘sOwner建立链接Connect同时负责内存管理访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HaiJunYa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值