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

131 阅读3分钟

1,KVO的实现原理

KVO:简称Key-Value-Observer,观察者模式, 当某个类的实例注册成这个对象的观察者后,利用runtime的特性,底层会生成一个基于这个观察者对象所属类的新类,然后重写Setter方法,在此方法内部,添加willChangeValueForkey,和didChangeValueFoKey方法,当调用此方法时,通过Runtime的Swizzig方法,将原对象的Setter实现方法的指引指向新创建的类的这个Setter方法。就会出发观察者对象的回调方法。

2.nil,Nil,null,NULL的区别(Objetive-c)

  • nil:指向一个对象的空指针
  • Nil:指向一个类的空指针
  • null:指向一个其他类型(基本类型,C类型)的空指针
  • Null:表示集合中的空值。

空指针:没有存储任何内存地址的指针;

举例:1.NSURL *url = nil;
2.Class class = Nil
3. int *pointInt = null
4. NSArray *arr = [NSArray arraywithObjects:obj1,objc2,[NSNull null],objc3,nil];

扩展:Swift中的nil swift中的nil不是指针,表示值缺失,任何类型的Optional都可以被赋值为nil.

3.常见的动画的类有?

CABasicAnimation,CAKeyframeAnimation,CATransitionAnimation,CAAnimaitonGroup.

4.显示动画与隐式动画

  • 隐式动画由 UIView animationWithDuration:animations创建的动画
  • 显式动画由 BeginAnimations:context 或 CommitAnimations:context 创建的动画

隐式动画需要手动关闭,显式动画需要手动创建 隐式动画在每一个runloop中会开启一个新的事务,在这个runloop的循环周期内,所有属性的改变会被存储一起,集中一起做一个0.25 秒的动画。

5.class和struct的区别

class是引用类型,在赋值或者拷贝的时候,传递的是对象的引用指针 struct是值类型,赋值或者拷贝的时候,传递的是对象的内存拷贝

class相比于struct的优势 class可以继承,子类可以调用父类提供的方法或者特性 class的对象可以被多次引用 可以通过Deinit释放资源

struct相对于class的有点 结构简单,线程安全的,不用担心内存泄露等问题以及线程冲突

6.swift的多态

是指相同父类的一批子类,调用相同的方法,具体的实现可以不一样。

7.associatedtype关键字的作用

associatedtype字面意思是关联类型,在写泛型函数的时候,参数不确定具体是什么类型,例如T,用此关键字声明一个关联类型变量。 associatedtype T,待真正用到的时候,通过typeallies取别名的方式,来传入具体的类型。 举例

//模型
struct Model {
    let age: Int
}
//协议,使用关联类型
protocol TableViewCell {
    associatedtype T
    func updateCell(_ data: T)
}
//遵守TableViewCell
class MyTableViewCell: UITableViewCell, TableViewCell {
    typealias T = Model
    func updateCell(_ data: Model) {
        // do something ...
    }
}

8.UDP和TCP

UDP是User Data Protocol的简称,用户数据报协议,它是一个面向非连接的协议,不需要建立连接,直接把数据包发过去。适用于一次性发送少量的的数据,对可靠性要求不高的场景,例如:多媒体教室/流媒体 特点:

  • 只管发送,不管对方有没有收到
  • 将数据及源与目的地放在数据包中,直接发送数据包
  • 不需要建立连接,速度快
  • 每个数据包的大小控制在64K以内
  • 不建立连接,是不可靠协议

TCP是Transport Control Protocol的简称,传输控制协议,是基于连接的协议,在进行对话前,需要建立连接,连接的过程需要3次握手,连接后,进行数据的传输,保证数据是按序,完整的发生到目的地的。 特点:

  • 建立连接,才能进行数据传输
  • 数据包大小无限制
  • 是可靠协议,保证安全送到
  • 会进行数据的和校验,保证数据的有序且完整
  • 必须建立连接,且会进行校验,效率相比UDP低

简单来说,TCP保证数据安全完整有序送到,效率低, UDP传输速度快,但有可能丢包。