美文网首页
2.函数指针简介

2.函数指针简介

作者: Mars_Rui | 来源:发表于2019-02-27 16:26 被阅读0次

整理几个方法:

Q1: SEL methodId=@selector(func1);

Q2:[self performSelector:methodIdwithObject:nil];

Q3:NSString*methodName = NSStringFromSelector(methodId);

Q4:IMP methodPoint = [self methodForSelector:methodId];

整理几个名词:

名词1: SEL

名词2: IMP

名词3: 成员变量

名词4: 属性

名词5: Dispatch table

名词6: Method

方法定义:

*注:来自网络。

Q1:有什么办法可以知道方法编号呢@selector()就是取类方法的编号。

SEL methodId=@selector(func1);

Q2:编号获取后怎么执行对应方法呢

[self performSelector:methodIdwithObject:nil];

Q3:有没有办法通过编号获取方法

NSString*methodName = NSStringFromSelector(methodId);

Q4:IMP怎么获得和使用

IMP methodPoint = [self methodForSelector:methodId];

methodPoint();

名词解释:

名词1: 类成员方法的指针(可以理解为实例方法+类方法的总和)

名词2: 函数指针,保存了方法的地址。

名词5: 可以理解为SEL与IMP的对应关系表

名词6: 就是函数,每个Method对应的objc_method结构体包含SEL:method_name(方法名),char:method_types(方法类型),IMP:method_imp(方法实现)

理解:

先按照个人理解解释下名词3和名词4的区别:成员变量与属性的不同就是,成员变量是通过self->调用。属性通过self.调用。

成员变量不自动生成get和set方法。而属性会自动生成get和set方法。

名词1与名词2的区别大致在于:SEL保存了方法编号,通过@selector(fun)方法获取对应方法名称的方法编号。而IMP保存的是方法地址,指向内存。

总结:

方法通过SEL找到编号,通过Dispatch table找到对应的IMP,然后再实现该方法。

参考网址:

https://www.jianshu.com/p/4a09d5ebdc2c

相关文章

网友评论

      本文标题:2.函数指针简介

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