1.iOS的消息发送机制
答.对象调用某个方法后,runtime库会根据对象的isa指针找到对象所属的类,在类的方法列表中查询,如果未找到,则在类的父类的方法列表中查找,依次往上查询,直到基类,如果还未找到的话,会经历三次消息转发,如果三次都没有处理,则会报Unrecognized seletor for xxxx 其中,三次的消息转发细节如下:
第一次,调用,
+(Bool)resolveInstanceMethod:(SEL)sel{
//可从参数中得到方法名,再动态添加实现方法,再调用父类的ResoveInstanceMethod
//Class_addMethod(sel,Imp,..)
return [super resolveInstanceMethod:Sel];
}
第二次调用,
+(id)forwardingMethodForSeletor:(SEL)seletor {
//返回一个可接收此消息的对象
return ...
}
第三次调用
+(NSMethodSignalture)methodSignaltureForSeletor:(SEL)sel {
//返回一个可用的签名函数
}
如果实现了第三个方法,接着会调用
+(void)forwardingInvocation:(SEL)sel{
//可以进行简单的异常处理,不至于会崩溃
}
因此,此模式可基于NSObject类,写一个异常处理类,防止未实现对应消息引起的崩溃
2.字典的内部原理
字典里面根据hash函数算出的hash值,将key,value一对对的有序的存储起来的数组。 例如,由某个Key算出的Hash值h,数组长度为n,对应的位置索引是h/n
3.disignated,convience,required等关键字的差异
designated作为一个类首要的初始化方法的修饰符,有且只能有一个 convience用来修饰可选的初始化方法,内部会调用一个首要的初始化方法 required用来要求子类必须实现某个父类的方法时的修饰符
4.七层协议,以及对应的作用
- 应用层 ---- 处理网络应用
- 表示层 ---- 数据表示
- 会话层 ----互联主机通讯
- 传输层 ----端到端的连接
- 网络层 ----寻址和最短路径
- 数据链路层 ---接入介质
- 物理层 ---- 二进制传输
5.defer关键字的意思(Swift)
用在函数最后才执行的逻辑中,保证最后执行且一定会执行