美文网首页
OC分类与原类方法重名

OC分类与原类方法重名

作者: 栀子_f1b9 | 来源:发表于2021-03-23 15:01 被阅读0次

关于OC的分类,网上已经有很多文章了,所以在此不再写分类与类的关系与调用顺序直接上结论:如果分类与原类存在相同的方法,那么分类的方法会合并到原类并且会在原类的方法前面,所以如果调用的类方法的时候是调用了分类里的方法。
最近几天在面试,发现面试官很喜欢问一个问题,如下:
1.我想调用原类的方法而不是分类的方法可以实现吗,怎么实现;
2.我想即调用原类的方法又调用分类的方法可以实现吗,怎么实现;
我确实没实现过,只能大体给个思路就是运用runtime,不过当时没有给出明确的方案,回来之后还是决定试试,毕竟现在这个问题,很流行?。。。。。。
直接上代码吧:

  • (void)categoryTest {
    Person *person = [[Person alloc] init];
    unsigned int count; // 1
    Method *methods = class_copyMethodList([Person class], &count);
    NSInteger index = 0;
    for (int i = 0; i < count; i++) {
    Method method = methods[i];
    SEL methodsel = method_getName(method);
    NSString strName = [NSString stringWithCString:sel_getName(methodsel) encoding:NSUTF8StringEncoding];
    if ([strName isEqualToString:@"test"]) {
    index = i;
    }
    }
    [person test]; //分类方法
    //原类方法
    SEL sel = method_getName(methods[index]);
    IMP imp = method_getImplementation(methods[index]);
    ( (void(
    )(id,SEL))imp)(person,sel);
    }

相关文章

  • OC分类与原类方法重名

    关于OC的分类,网上已经有很多文章了,所以在此不再写分类与类的关系与调用顺序直接上结论:如果分类与原类存在相同的方...

  • iOS类的方法调用顺序面试题

    类的方法和分类的方法重名,执行的是哪一个方法? 首先如果重名方法不是Load方法,那么先执行分类方法 那么如果重名...

  • 在category中实现dealloc要执行的代码

    问题: 给类添加category方法时,如果方法名与原类中的方法重名是会‘覆盖’原类的方法(不是真正意义上的覆盖,...

  • OC底层探索17、类的加载补充 & initialize

    1、+load 方法的顺序 已知分类添加的方法与本类方法重名时的调用顺序是优先分类的方法,当 +load 方法主类...

  • iOS底层原理 16 :底层面试题

    1. 主类的方法和分类的方法重名,会如何调用? 如果重名的是+load方法,则先执行父类的load方法 ,其次主类...

  • 十五、runtime面试题

    1、类的方法 - 分类的方法重名,谁先调用 一般情况下分类先调用,load是先主类再分类 找到所有的load方法,...

  • 对于OC中Category(分类)的加载时机、实现原理

    一个类的分类是何时被载入内存的?分类中方法与对应类中的方法重名时调用此方法怎么执行? 想了解以上问题还需要查看ob...

  • 分类-Category

    分类-Category 分类的功能 在OC中,我们可以使用分类为类添加方法,属性.也可以覆盖类原有的方法,自己添加...

  • 分类-Category

    分类-Category 分类的功能 在OC中,我们可以使用分类为类添加方法,属性.也可以覆盖类原有的方法,自己添加...

  • OC Category陷阱

    测试OC Category分类方法与类方法同名情况的调用 1、创建UIView的category,假定名称为UIV...

网友评论

      本文标题:OC分类与原类方法重名

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