iOS面试题四

1.简述你对UIViewUIWindowCALayer的理解


UIView:属于UIkit.framework框架,负责渲染矩形区域的内容,为矩形区域添加动画,响应区域的触摸事

,布局和管理一个或多个子视图 

UIWindow:属于UIKit.framework框架,是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面。UIWindow在程序中主要起到三个作用:

1、作为容器,包含app所要显示的所有视图2、传递触摸消息到程序中view和其他对象3、与

UIViewController协同工作,方便完成设备方向旋转的支持

CAlayer:属于QuartzCore.framework,是用来绘制内容的,对内容进行动画处理依赖与UIView来进行显示,不能处 理用户事件。UIViewCALayer是相互依赖的,UIView依赖CALayer提供内容,CALayer依赖UIView一共容器显示 绘制内容。

UIViewController:管理视图的几成熟,每个视图控制器都有一个自带的视图,并且负责这个视图相关的一切事务。方便 管理视图中的子视图,负责modelview的通信;检测设备旋转以及内存警告;是所有视图控制类的积累,定义了控制器 的基本功能


2. 写一个完整的代理,包括声明,实现

(略)


3.分析jsonxml的区别?jsonxml解析方式的底层是如何处理的?


简言之:

json数据小,易解析,不复杂    xml数据较大,比较复杂

json中以key/value形式保存,大多数是字典数组模式

xml中则是<> 节点


详细来说:

(1)可读性方面:基本相同,xml的可读性比较好

(2)可扩展性方面:都具有很好的扩展性

(3)编码难度方面:相对而:JSON的编码比较容易

(4)解码难度:json的解码难度基本为零,xml需要考虑子节点和父节点 

(5)数据体积方面:json相对于xml来讲,数据体积小,传递的速度跟快些 

(6)数据交互方面:jsonJavaScript的交互更加方面,更容易解析处理,更好的数据交互 

(7)数据描述方面:xml对数据描述性比较好(8)传输速度方面:json的速度远远快于xml

JSON底层原理:遍历字符串中的字符,最终根据格式规定的特殊字符,比如{},[], :  等进行区分,{}号是一个字典 的开始,[]号是一个数组的开始, : 号是字典的键和值的分水岭,最终乃是将json数据转化为字典,字典中值可能是字典, ,或字符串而已。

XML底层原理: XML解析常用的解析方法有两种:DOM解析和SAX解析。

DOM 采用建立树形结构的方式访问 XML 文档, SAX 采用的事件模型。 

DOM 解析把 XML 文档转化为一个包含其内容的树,并可以对树进行遍历。使用 DOM 解析器的时候需 要处理整个 XML 文档,所以对性能和内存的要求比较高。

SAX在解析 XML 文档的时候可以触发一系列的事件,当发现给定的tag 的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX 对内存的要求通常会比较,因为它让开发人员自己来决 定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX 这种扩展能力得到了更好的体现。


4. ViewController didReceiveMemoryWarning 是在什么时候被调用的?默认的操作是什么?


1)当应用程序的内存使用接近系统的最大内存使用时,应用会向系统发送内存警告,程序收到内存警告时候ViewController会调用didReceiveMemoryWarning这个方法。

2)调用了这个方法之后,对view进行释放并且调用viewDidUnload方法

3)从iOS3.0开始,不需要重载这个函数,把释放内存的代码放到viewDidUnload中去。


5.面向对象的三大特征,并作简单的介绍


封装、继承、多态

封装:将一个实例的所有属性封装到某个类中

继承:子类继承父类所有方法和属性

多态:父类指针指向子类对象


6. 简述NotificationCenterKVCKVODelegate?并说明它们之间的区别?


NotificationCenter:任何对象可以发送通知到中心,同时任何对象可以监听中心的通知。

优点: 通知的发送者和接受者都不需要知道对方。可以指定接收通知的具体方法。通知名可以是任何字符串。

缺点: 较键值观察需要多点代码。在删掉前必须移除监听者。不能传大量数值,只能让谁去做什么事。


KVC,即是指 NSKeyValueCoding,键值编码。提供一种机制来间接访问对象的属性。而不是通过调用SetterGetter方法访问


KVO的是KeyValue Observe的缩写,键值观察。这是一个典型的观察者模式,观察者在键值改变时会得到通知。


Delegate:多用于两个类之间的传值,效率NSNotification


7.懒加载

又称延迟加载,按需加载。

只在用到的时候才去初始化


8. 什么是Protocol?什么是代理?写一个委托的interface?委托的property声明用什么属性?为什么?


协议,用来在两个ViewController交互时所定的协议。

代理,第三方中介

weak 或者 assign ,防止循环引用


9.分别描述类目(categories)和延展(extensions)是什么?以及两者的区别?继承和类目的实现中有何区别?为什么Category只能为对象添加方法,却不能添加成员变量?


类目:主要作是为没有源代码的类添加 。通过Category添加的法会成为原类的部分。从达到扩展个类的功能。

延展:主要作是给某类添加私有方法或是私有变量,延展可以认为是一个私有的类目。 

两个的区别:延展可以添加属性并且它添加的方法是必须要实现的。

继承和类别在实现中的区别:类别可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。

Category只能为对象添加方法,却不能添加成员变量的原因:如果可以添加成员变量,添加的成员变量没有办法初始----这是语言规则



你可能感兴趣的:(ios,面试)