OC中函数的调用

作者: 新南12138 | 来源:发表于2019-04-23 16:10 被阅读5次

简介

最近在做一个复杂的界面,涉及到 UINavigationController 、UITabBarController、UIViewController、之间的函数调用,需要把原先在UIViewController中的功能转移到UITabBarController 或者 UINavigationController中,这就导致了界面产生冲突,我已经在UIViewController中完成了这个方法,怎么在UINavigationController中调用

关于objc_msgSend

在对象上调用方法是 Objective-C 中经常使用的功能。用 Objective-C 的术语来说叫做传递消息。消息有名称 (name) 或选择子 (selector) ,可以接受参数,并且还有可能有返回值。

IMP

类的方法列表会把selector的名称的映射到相对应的方法上,使得“动态消息派发系统”能够据此找到相应的方法。这些方法均以函数指针的形式来表示,这种指针就是IMP

id (*IMP) = (id,SEL,...) 

selector(SEL)的生成

SEL的生成分为三种情况
1.无参

SEL selector = NSSelectorFromString(@"log");

2.有参数

SEL selector = NSSelectorFromString(@"logWithAll:type:");

IMP的生成

IMP imp1 = [self methodForSelector:selector];

方法的执行

- (NSString *)logWithAll:(NSString *)name type:(NSString *)type{
    NSLog(@"name is %@  type is %@",name,type);
    return @"aaa";
}

if ([self respondsToSelector:selector]) {
    NSString* (*func)(id,SEL,NSString*,NSString*) = (void *)imp1;
    NSString *result =  func(self,selector,@"哈哈",@"hehe");
    NSLog(@"result is %@",result);
}

结果

结构大概就是这样的

NSString* (*func)(id,SEL,NSString*,NSString*) = (void *)imp1;
返回值                     parmar1  parmar2       IMP

调用

NSString *result =  func(self,selector,@"哈哈",@"hehe");

输出结果


结果.png

相关文章

  • 3,消息转发机制

    1,OC方法的调用 OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiver(方法调用...

  • objc_msgSend调用流程

    oc的方法调用 OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiver(方法调用者)...

  • Runtime的原理

    OC的消息机制 OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiver方法调用者 发...

  • OC中函数的调用

    简介 最近在做一个复杂的界面,涉及到 UINavigationController 、UITabBarContro...

  • iOS: runtime面试题

    问: 说说OC的消息机制? OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiver...

  • OC中的Category(三)

    OC中的Category(三) OC中+initialize函数加载和调用 OC对象是在查找方法时判断自己有没有初...

  • iOS runtime 知识点总结

    1.说说OC的消息机制? OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiver(方...

  • 2、block的本质是什么?有几种block?分别是怎样产生的?

    block是封装了函数调用以及函数调用环境的oc对象

  • iOS底层面试题--Runtime

    1、简述一下 OC 的消息机制? OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiv...

  • iOS :runtime

    1、讲一下 OC 的消息机制   OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiv...

网友评论

    本文标题:OC中函数的调用

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