iOS基础知识面试合集

ios 基础知识整理(二)

2020-12-17  本文已影响0人  90后的晨仔
一、分类(Category)

1.你都用分类在项目中做了哪些事情?

3.分类中都可以添加哪些内容?

分类总结:

二.扩展(Extension)

1.一般扩展做什么?

分类与扩展的区别?
区别:

三.代理(Delegate)

四.通知

特点:

五.KVO

isa混写在KVO试怎么实现的呢?工作原理是什么?
当我们调用了isa pointer 方法的时候,系统会动态创建一个NSKVONotifying_A这样一个类,同时将原来类的isa指针指向一个新创建的NSKVONotifying_A类。NSKVONotifying_A是原来类的一个子类,两者是继承关系,目的是为了重写原有类的Setter方法,重写的setter方法负责通知所有观察对象。

系统重写的两个方法如下:

六.KVC

1.设置值的实现原理

(1).首先搜索是否有setKey:的方法,没有则会搜索是否有setIsKey:的方法。
(2).如果经过搜索没有找到setKey:的方法,此时就会查找+ (BOOL)accessInstanceVariablesDirectly;(是否直接访问成员变量)这个方法,若该方法返回NO,则直接调用- (nullable id)valueForUndefinedKey:;(默认是抛出异常)。若返回YES,会按照_key_iskeykeyiskey的顺序搜索成员名。
(3).若在第二步还没搜索到的话就会调用- (nullable id)valueForUndefinedKey:方法

2.取值的实现原理

(1).按照getKeykeyisKey_getKey_key这样的一个顺序依次去查找并获取值,若直接获取到则返回,后续方法不再执行。如果是BOOL或者Int等值类型, 会将其包装成一个NSNumber对象。
(2).若这几个方法都没有找到,则会调用+ (BOOL)accessInstanceVariablesDirectly方法判断是否允许取成员变量的值。如果该方法返回NO,直接调用- (nullable id)valueForUndefinedKey:(NSString *)key方法,默认是崩溃。
若返回YES,会按先后顺序取_key_isKeykeyisKey的值。
(3).返回YES时,_key_isKeykeyisKey的值都没取到,调用- (nullable id)valueForUndefinedKey:(NSString *)key方法。

上一篇下一篇

猜你喜欢

热点阅读