在写代码的时候这个差距其实是不打看的出得,很多时候也就无所谓叫什么,很多人为了便于理解,干脆就叫函数调用。
这个其实应该是oc的一个特色,消息发送。
具体的类
typedef struct objc_class *Class; typedef struct objc_object { Class isa; } *id; typedef struct objc_selector *SEL; typedef id (*IMP)(id, SEL, ...);
类结构
struct objc_class { **struct** objc_class **super_class; /*父类*/** const char *name; **/***类名字*/ long version; ** /***版本信息*/ long info; **/***类信息*/ long instance_size; **/***实例大小*/ **struct** objc_ivar_list *ivars; ** /***实例参数链表*/ **struct** objc_method_list **methodLists; ** /*方法链表*/** **struct** objc_cache *cache; **/***方法缓存*/ **struct** objc_protocol_list *protocols; ** /*协议链表*/** };
在这个methodLists中是一个方法的list
typedef struct objc_method *Method; typedef struct objc_ method { **SEL method_name;//方法名称** **char *method_types;//方法参数类型** **IMP method_imp;//方法实现的函数指针** };
当你发送消息时,首先回去找它对应的方法list,找到后就会使用相应的方法。
大致是这样的流程,当然细节也很多
1,它首先找到 SEL 对应的方法实现 IMP。因为不同的类对同一方法可能会有不同的实现,所以找到的方法实现依赖于消息接收者的类型。
2, 然后将消息接收者对象(指向消息接收者对象的指针)以及方法中指定的参数传递给方法实现 IMP。
3, 最后,将方法实现的返回值作为该函数的返回值返回。
消息发送&&函数调用
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
- 一、类的数据结构 Class(指针) typedef struct objc_class *Class; /* 这...