使用/不使用xib创建图形
1、关于xib文件:
xib的来源和历史就不阐述了,但要记住这是一个xml文件,系统会根据该文件中的key&values来初始化图形界面,并且由于xcode的支持,在开发时使用xib文件来设置UI,使开发工作更加形象化。
2、不使用xib,直接用code实现是否更好?
刚开始学习时认为,直接用code实现肯定更加灵活,更便于控制,以及效果更好、使用与否完全靠个人喜好之类,实际上并如此:
其实适时的使用xib来管理,可以很方便的提高app的兼容性,以及在进行诸如旋转之类的操作时,通过xib来设置的component,与直接用code实现的相比,前者过渡更圆滑、效果更好,我在项目中就遇到了这样的问题:我直接在一subview上添加了一个uiwebview,并根据旋转方向重置其center,但移动后的webview中的文字,会出现模糊的现象,一旦去掉重置center的语句,效果又恢复,最后用xib文件重构了该webview的super view,在其中又加入了一container view,并在xib中设置其autoResizeMask,问题解决。
当然这其中或许还有uiwebview的特殊性在里面,但不可否认使用xib来解决这类问题,会更加方便以及彻底,也可以app与系统的衔接更加“无缝”。
3、关于效率问题的考虑:
1、既然是否使用xib来生成界面主要在init时,即是说xib文件是用来初始化component的初始属性的,且这些属性必须在viewDidLoad后才会生效,而如果以code方式,在你设置某一属性后便会生效,就不会走controller的生命周期了,这一点虽然无法直接的比较出哪一种效率更高,但显然以code方式,对象的控制权就被把握在编写者手中,而不controller的生命周期中了,这显然不是apple的本意,就不会是系统喜欢的。
2、使用init/initWith...与否,我想都不会过多的减少成员变量的初始化数量,无论哪种方式下,background有值、autoResizeMask有值、frame/bounds均有,不过是0而已,而不会是空。
3、在系统实现方面,应该还有一个影响较大的方面,xib是文件,并未在内存中,因此系统需要创建文件流来读取文件,如刨除生命周期的问题,肯定xib的效率要低些,通过xib来init最好不要放在循环结构中。
4、但显然生命周期的考虑是不可避免的,因为这会影响程序之后的运行,因此笔者的结论就是,在非循环结构的程序中,尤其在UI的结构比较复杂时,就尽量的使用xib来创建吧,而在循环体内,则应该多使用code方式。
浙公网安备 33010602011771号