method-swizzling 什么时候调用比较合适?
放到load 方法里边:1.调用的时间比较早 2.自动执行 3.唯一性(每个类的load方法只会执行一次)
method-swizzling坑:
1.使用method-swizzling 交换了方法以后,主动调用 load 方法,又会交换回来([NSArray load])
解决办法:使用dispatch_ones 处理交换内容,使其只能交换一次。
2.子类使用method-swizzling 交换没有实现的父类方法,直接奔溃(父类找不到交换的方法)
![](https://img.haomeiwen.com/i14771483/ae02f309d3ca5495.png)
![](https://img.haomeiwen.com/i14771483/cfb8c743870bcdbb.png)
![](https://img.haomeiwen.com/i14771483/7f6f25c1b719fe30.png)
![](https://img.haomeiwen.com/i14771483/8320a8dd72b25c06.png)
解决办法:给子类添加一个imp实现,让子类单独的交换,不要交换父类的
3.当类没有实现这个方法,直接交换,就会发生递归(因为是2个SEL 和一个IMP,交换没有成功,导致 2个SEL 都指向了IMP,形成了递归调用)。
![](https://img.haomeiwen.com/i14771483/3cfe6588bf9355d6.png)
![](https://img.haomeiwen.com/i14771483/871b2ca8f6cfc5f8.png)
解决办法:给方法添加一个实现
面试题:
一. isKindOfClass 和 isMemberOfClass有什么不同
![](https://img.haomeiwen.com/i14771483/acbfd092f8f85167.png)
why?源码可以看出
![](https://img.haomeiwen.com/i14771483/ac52248031125c4c.png)
isMemberOfClass
1.self的原类是否是cls
2.self对象的类是否是cls
isKindOfClass:
1.self 的原类(或者原类的父类)是否是 cls
2.self 对象的类(或者类的父类) 是否是cls
isSubClassOfClass:
self 是否是class 的子类或者self 是cls的本身
二. [self class ] 和 [super class] 的区别
![](https://img.haomeiwen.com/i14771483/4b2b7f8073d9ad13.png)
打印的都是 LGStudent,why?
![](https://img.haomeiwen.com/i14771483/a6ba61db5c2be4b0.png)
三:关联对象(association)什么时候释放?
和类的属性一样,都是在类析构的时候销毁的;
不同的是,类的属性是保存在类里边的属性列表里边,而关联对象是单独保存到associationHashMap里边
![](https://img.haomeiwen.com/i14771483/02b4f2603aa429b2.png)
四:weak对象存储原理和销毁以后为什么是nil?
![](https://img.haomeiwen.com/i14771483/9e654f05fcb9e8ff.png)
网友评论