iOS面试遗漏知识点整理(一)

167 阅读2分钟

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)

用在函数最后才执行的逻辑中,保证最后执行且一定会执行