美文网首页
Objective-C通过函数指针调用方法

Objective-C通过函数指针调用方法

作者: czfeng | 来源:发表于2017-09-18 11:25 被阅读0次

类中定义的方法通常是以函数形式实现的,但通常在编程的时候并不会直接操作方法对应对函数。

如果想让程序更快一点,可以通过函数指针的方式调用方法。(提升了速度,但失去了面向对象的动态绑定、多态的特性)

IMP 类型

IMP是“implementation”的缩写,是一个函数指针,指向了方法实现代码的入口。

IMP定义为

typedef id (*IMP)(id,SEL,..);

获得函数指针的方法

 -  (IMP)methodForSelector: (SEL) aSelector

搜索和指定选择器对应的方法,并返回指向方法实现的指针。实例对象和类对象都可以使用这个方法。

 + (IMP)instanceMethodForSelector: (SEL)aSelector

搜索和指定选择器对应的实例方法,并返回指向方法实现的指针。

用法

设有以下一个方法

- (id)setBox: (id)obj1 title: (id)obj2;

我们通过以下代码实现调用

IMP funcp;

//设foo为实例变量,函数调用方法为[fool setBox:obj1 title:obj2];  ,但下处使用foo的实例方法返回函数指针从而调用函数setBox: title

funcp = [foo methodForSelector:@selector (setBox:title:)];

xyz = (*funcp)(foo,@selector(setBox:title:),param1,param2);

从以上代码可知,通过函数指针调用的方式其实含有两个 隐含参数 。 第一个为self,第二个为选择器(可以通过_cmd变量来访问)。

内容引自《Objective-C编程全解》- [日]

相关文章

  • Objective-C通过函数指针调用方法

    类中定义的方法通常是以函数形式实现的,但通常在编程的时候并不会直接操作方法对应对函数。 如果想让程序更快一点,可以...

  • IOS +load和+initialize方法原理详解及区别

    +load方法: +load方法是通过函数指针地址来调用的。 +load方法会在runtime加载类、分类时调用,...

  • C++面向对象高级编程(下)-第二周-博览网

    对象模型 指针指向子类,通过指针调用虚函数,自动调用子类的虚函数实现, 指针调用虚函数时,不做静态绑定,做动态绑定...

  • C++:函数指针

    函数指针:是一个特殊的指针,用于指向函数。和通过函数名调用一样,函数指针给我们提供了另一种调用函数的可能。函数指针...

  • C/C++函数指针+动态内存分配

    函数指针//定义一个函数void message(){}//通过指针调用函数void (*p) () =mess...

  • load与initialize

    一、load load的方法调用是在加载类的时候,是通过函数的指针直接调用的,不是通过obj_msgSend消息发...

  • 无理解javascript 回调函数

    回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用...

  • 回调函数

    回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它...

  • 回调Callback

    回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其...

  • 回调函数(callback)

    回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其...

网友评论

      本文标题:Objective-C通过函数指针调用方法

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