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

    (1).动态添加方法和类有什么好处?答:当一个类中的方法非常多且有些方法不常用的时候如果直接写了方法,那么这些方法...

  • 消息转发机制步骤

    + (BOOL)resolveClassMethod:(SEL)sel //为类方法进行决议 +(BOOL)res...

  • iOS消息转发机制

    1、本类有机会新增一个方法: + (BOOL)resolveClassMethod:(SEL)selOBJC_AV...

  • iOS 类和元类的关系

    事情的始末是这样的,同学想验证一下resolveClassMethod是否执行(resolveClassMetho...

  • iOS runtime消息转发机制等

    消息转发机制分可以为三步,第一步:动态方法解析,询问该类是否能动态添加该方法,执行方法为resolveInstan...

  • -和 和 -

    产品介绍:和和是一款会员制共享平台;所有 经营者可在APP内注册和和商家成为会员供 应商(实体店、网店、微商、平台...

  • &和&&,|和||

    原文:https://blog.csdn.net/chinabestchina/article/details/7...

  • 和可和,非常和

    我年纪很小的时候,父亲有一本笔记本,上面只写了一句话:万物并育而不相害,道并行而不相悖。我当时很喜欢这句话,所以期...

  • kotlin中的空? 和 ?. 和 ?: 和 as? 和 !!

    ? 可空类型 kotlin和Java的类型系统之间的一个很重要的区别就是,Kotlin对可空类型的显示支持 也就是...

  • self. 和 _ 和 = 和 set

    声明了一个属性 @property (a,b) p1; 只有用self.调用时修饰关键词才起作用, 用_调用...

网友评论

      本文标题:resolveClassMethod和resolveInstan

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