iOS 面试题集-05
1、简述xml和json解析:
1>、xml数据解析有两种解析方式;DOM解析与SAX解析,DOM解析必须完成DOM树的构造,在处理规模较大的XML文档就很耗内存,占用资源较多。
2>、与DOM不同的是,它是用事件驱动模型,解析规模较大的XML文档时就很耗内存,占用资源较多。
3>、与DOM不同的是,它是用事件驱动模型,解析XMI文档时每遇到一个开始或者结束标签、或者属性、或者一条指令时,程序就产生一个事件进行相应的处理,因此,SAX相对于DOM来说更适合操作较大的XML文档。
4>、json解析现在性能比较好的主要是第三方的JSONKIT和iOS自带的json解析类,自带的json解析性能是最高的,但是iOS 5之后才可以使用。
2、iOS中有哪些数据持久化的方式,各有什么特点,iOS平台怎么做数据的持久化?CoreData和sqlite有无必然联系?CoreData是一个关系型数据库吗?
1>、主要有四种持久化方式:属性列表、对象归档、SQLite数据库、CoreData。
2>、CoreData不是一个数据库,不过可以使用SQLite数据库来保持数据,也可以使用其他数据来保持。例如:XML。
3>、属性列表、对象归档适合小数据量存储和查询。
4>、SQLite、CoreData适合大数据存储和查询操作。
3、简述单元测试:
1>、iOS自带了一个单元测试框架OCUnit,但是目前最好用的测试框架应该是GHUnit。
4、UITableView的重用机制:
1>、如果屏幕上能显示n个单元格,则tableview只会创建n+1个单元格,当滑到第n+2个单元格时就会复用第一个单元格。Tableview中有个单元格池的这么一个概念,tableview调用协议方法获取单元格时,先从池子中查找是否有可复用的单元格,如果有则复用,如果没有则创建一个单元格对象。
5、如何优化tableview的滑动速度:
1>、复用单元格;
2>、使用不透明的视图,单元格中尽量减少动画;
3>、图片加载使用异步加载,并设置图片加载的并发数;
4>、文字、图片可以直接用drawInRect绘制;
5>、滑动时不加载图片、停止加载时开始加载图片。
6>、如非必要,减少reloadData全部cell,使用reloadRowsAthIndexPaths;
7>、如果cell 是动态高度,计数出高度后缓存。
8>、cell高度固定的话直接使用cell.rowHeight设置高度;
6、简述socket的通信方式:
1>、Socket的通信是通过TCP/IP协议,实现客户端与服务器端之间的通信方式。客户端通过三次握手与服务器建立可靠的连接,然后进行数据的传送。
7、谈谈对Runloop的理解:
1>、Runloop是线程相关的基础框架一部分。一个runloop就是一个事件处理的循环、用来不停的调度工作以及处理输入事件。使用Run loop的目的是让你的线程在工作的时候忙于工作,而没工作的时候处于休眠状态。
8、UIView和UIViewController的关系:
1>、每个控制器都有一个根视图,控制器UIViewController用来管理此视图的加载与显示的。
9、iOS中都有哪些手势:
1> iOS提供了很多手势对象用于识别不同手势的操作:轻击、捏合、平移、轻扫、旋转、长按。
10、简述Storyboard、有什么特点:
1>、Storyboard是iOS5新增的特性,是对xib的升级版,引入了一个容器用于管理多个xib文件,和他们之间跳转交互。
优点:不用为每个控制器创建xib文件了,可以使用静态cell,当cell固定且不多时,使用起来比较方便。缺点:使用storyboard单个文件,不利于团队协作开发。