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

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

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

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通过函数指针调用方法)