美文网首页
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分类与原类方法重名

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