题库Ios开发

iOS常用基础面试问题

2020-09-28  本文已影响0人  UILabelkell

1、什么是block

2、使用block和使用delegate完成委托模式有什么优点?

2、什么是KVC和KVO?

KVC的底层实现

当一个对象调用setValue方法时,方法内部会做以下操作:
1.检查是否存在相应key的set方法,如果存在,就调用set方法
2.如果set方法不存在,就会查找与key相同名称并且带下划线的成员属性,如果有,则直接给成员属性赋值
3.如果没有找到_key,就会查找相同名称的属性key,如果有就直接赋值
4.如果还没找到,则调用valueForUndefinedKey:和setValue:forUndefinedKey:方法

KVO的底层实现

kvo基于runtime机制实现
使用了isa混写(isa-swizzling),当一个对象(假设是person对象,person的类是MyPerson)的属性值(假设person的age)发生改变时,系统会自动生成一个类,继承自MyPerson,NSKVONotifying_MyPerson,在这个类的setAge方法里面,调用[super setAge:age] [self willChangeValueForKey:@"age"] 和 [self didChangeValueForKey:@"age"],而这两个方法内部会主动调用监听者内部的- (void)observeValueForKeyPath 这个方法。

KVO的缺陷

优点:

缺点:

单例优缺点

缺点

iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?

上一篇 下一篇

猜你喜欢

热点阅读