iOS开发中一直存在的分歧:到底是手写代码还是用nib文件。以前我是一个坚定的纯代码布局者。一直都鄙视用nib文件布局的,感觉这就是偷懒,而且会导致代码不好看,所以也一直都没认真看过nib布局。可是后来,当美工说,这个在iPhone4上布局有问题,在iOS6上按钮显示效果不一样………balabala……我发现,修改布局时间就能占一天。所以我认真看了下xib文件的使用。发现,用它来适配多屏幕太方便了。加之苹果不断的优化,我想以后的日子中,xib文件也会越累越流行的。
瞎扯到此,那就记录下我最近看的关于nib文件的使用。
很久之前,nib文件还是nib文件。后来出来了xib文件。这两者区别就是:
xib文件是一个xml文件,nib文件是一个纯二进制文件。xib序列化的记录了所有关于view,file's owner,responser等信息。
xib文件的好处:
1,版本是管理。xib作为一个xml文件更适于git等版本管理软件,而nib这个二进制文件,非常不利于版本管理(如果git中有一个大的二进制文件,那么会大大拖慢git操作的速度)。
2,xib文件程序员可以直接用文本编辑器打开看,nib文件是不可能的。
3,xib文件最后也要转为nib文件才会被程序使用。这一步是在编译时完成的。这样,既保证了nib的速度,用保证了程序员的使用和管理。
关于xib文件:主要有view,file's owner,responser这三部分组成。要明白的是,苹果是严格按照MVC设计模式来的,因此,这里面也是遵循MVC的。不过主要是V和C,M是比较隐藏的。V当然指的就是View,C是指file's owner,其中可以有个M的,就是View栏中的Object。View的创建是在调用
[[NSBundle mainBundle] loadNibNamed:
owner:options:]
时进行初始化的。file's owner是在代码中创建实例了才会和view中的IBoutlet相连。这里需要说一下的其中有一个选项是Object。它是可以代指任何对象的。
file's owner和View都有Custom Class。根据这个的不同,可以分为四种情况:
1,file's owner:Custom Class View:nil
2,file's owner:nil View:Custom Class
3,file's owner:nil View:nil
4,file's owner:Custom Class View:Custom Class
其中情况1是最常用的。它是自定义一个控制器然后用xib对其View进行布局。情况2是自定义一个View。程序中经常会需要定制的view,那么这时候2就是最合适的,而且,定制的view可以复用。情况3同2差不多,只是View自定义的程序相对较落,不能用代码管理其中的事件。4相对来说用的不多,它是在特定的CustomController中添加CustomView。
使用xib文件一个最大的坏处就是对于版本管理完全是个灾难(相对于代码来说)。当多人开发中遇到冲突时,面对XML文件,真是一万个草泥马在心中奔腾……因此,xib文件用的时候,只把布局的任务交给它,至于其他的属性,尽量用代码来写,比如圆角、颜色、title等。尽可能减少冲突。
PS:
1,[[NSBundle mainBundle] loadNibNamed:
owner:options:]和
[UINib nibWithNibName:bundle:nil的区别:
前者返回的是view,这个方法会直接调用initWithCoder返回实例(注意,这里都是autorelease的),后者返回的nib文件,没法直接用,只有在tableview中常用。
2,object的使用:object其实没什么用,它会直接实例化一个变量,不过既然不是view,何不用代码实现。
这里有对xib文件应用的一个例子:http://www.cocoachina.com/ios/20150202/11086.html