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?

网友评论