美文网首页
resolveClassMethod和resolveInstan

resolveClassMethod和resolveInstan

作者: _菩提本无树_ | 来源:发表于2021-12-20 17:17 被阅读0次

    (1).动态添加方法和类有什么好处?答:当一个类中的方法非常多且有些方法不常用的时候如果直接写了方法,那么这些方法会直接加载到内存,于是内存就很大了,所以我们使用runtime的动态添加方法就不会出现这个问题,只有在运行时才会添加到内存
    //处理对象方法,学名动态方法解析

    + (BOOL)resolveInstanceMethod:(SEL)sel{
        NSString *methodName = [NSString stringWithUTF8String:sel_getName(sel)];
        
        if ([methodName isEqual:@"sendMessage:andName:"]) {
            //v表示void,id和参数都用@表示,下面的第一个@代表id self,第二三个代表id value,没有参数第二三个可以不写,(IMP)sendMessage代表的是函数指针
            class_addMethod([self class], @selector(sendMessage:andName:),(IMP)sendMessage , "v@:@@");
            return YES;
        }
        return [super resolveInstanceMethod: sel];
    }
    void sendMessage(id self,SEL cmd,id value,id bal){
        NSLog(@"%@",value);
    }
    

    //处理类方法,注意因为是类方法所以需要使用object_getClass返回元类才行

    +(BOOL)resolveClassMethod:(SEL)sel{
        NSString *methodName = NSStringFromSelector(sel);
        if ([methodName isEqualToString:@"classMethod"]) {
            class_addMethod(object_getClass(self), sel, (IMP)classMethod, "v@:");
            return YES;
        }
        return [super resolveClassMethod: sel];
    }
    
    void classMethod(id self,SEL sel){
        NSLog(@"%@",NSStringFromSelector(sel));
    }
    

    相关文章

      网友评论

          本文标题:resolveClassMethod和resolveInstan

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