OC分类与原类方法重名

关于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);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。