美文网首页
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