美文网首页
底层面试题

底层面试题

作者: Ray_lawq | 来源:发表于2019-02-27 15:46 被阅读0次

method-swizzling 什么时候调用比较合适?
放到load 方法里边:1.调用的时间比较早 2.自动执行 3.唯一性(每个类的load方法只会执行一次)

method-swizzling坑:
1.使用method-swizzling 交换了方法以后,主动调用 load 方法,又会交换回来([NSArray load])
解决办法:使用dispatch_ones 处理交换内容,使其只能交换一次。

2.子类使用method-swizzling 交换没有实现的父类方法,直接奔溃(父类找不到交换的方法)

解决办法:给子类添加一个imp实现,让子类单独的交换,不要交换父类的

3.当类没有实现这个方法,直接交换,就会发生递归(因为是2个SEL 和一个IMP,交换没有成功,导致 2个SEL 都指向了IMP,形成了递归调用)。

解决办法:给方法添加一个实现

面试题:
一. isKindOfClass 和 isMemberOfClass有什么不同

why?源码可以看出

isMemberOfClass
1.self的原类是否是cls
2.self对象的类是否是cls

isKindOfClass:
1.self 的原类(或者原类的父类)是否是 cls
2.self 对象的类(或者类的父类) 是否是cls

isSubClassOfClass:
self 是否是class 的子类或者self 是cls的本身

二. [self class ] 和 [super class] 的区别

打印的都是 LGStudent,why?

三:关联对象(association)什么时候释放?
和类的属性一样,都是在类析构的时候销毁的;
不同的是,类的属性是保存在类里边的属性列表里边,而关联对象是单独保存到associationHashMap里边

四:weak对象存储原理和销毁以后为什么是nil?

相关文章

网友评论

      本文标题:底层面试题

      本文链接:https://www.haomeiwen.com/subject/smjfuqtx.html