美文网首页
iOS runtime注意事项(持续改进中)

iOS runtime注意事项(持续改进中)

作者: 汝阴龙 | 来源:发表于2017-12-18 11:00 被阅读7次

1、分清类和对象:

对象:类的实例。instance。

类:也是对象,元类的对象:metaClass’s instance。

2、分清实例方法和类方法。

3、看看method在哪里?是从类里面获取,还是从元类里面获取。

4、方法交换,分清被交换的方法是类方法还是实例方法。

5、私有方法:就是开头带下划线的方法:_XXXX。不可以被交换。

6、方法被多次swizzle后,调用的到底是哪个方法?建议要分清。

7、如果原来的类中没有一个方法,xxx。那么如果你使用了这种操作,

class_addMethod(origC, @selector(xxx), method_getImplementation(newMethod), method_getTypeEncoding(newMethod))

按常规,下面还应该有一个操作,class_replaceMethod,事实上,不需要的,因为此时已经可以了。

打印一下看看,类的方法列表中已经有xxx这个方法存在了。

在其他地方,是可以通过下面这种方法调用的:

SEL currentSel = @selector(xxx);

[self performSelector:currentSel];

而且和下面的操作调用的是同一个方法:newMethod

SEL newSel = @selector(newXXX);

[self performSelector:newSel];

8、动态增加类的问题。

9、class_getInstanceMethod和class_getClassMethod

class_getClassMethod得到类的类方法

class_getInstanceMethod得到类的实例方法

10、可以给类添加属性、成员变量、方法、协议吗?

答案:可以,可以给一个动态添加的类添加任何一个常规类等所具有的东西。

相关文章

网友评论

      本文标题:iOS runtime注意事项(持续改进中)

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