在写代码的时候这个差距其实是不打看的出得,很多时候也就无所谓叫什么,很多人为了便于理解,干脆就叫函数调用。
这个其实应该是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, 最后,将方法实现的返回值作为该函数的返回值返回。
 
 
starain Dou 豆电雨
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
文/natewang(简书作者)
原文链接:http://www.jianshu.com/p/ca70bfb142da
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

最新文章

  1. LeetCode之136. Single Number
  2. 贪婪 vs 不贪婪
  3. Codeforces Round #381 (Div. 2) A B C 水 构造
  4. Cucumber
  5. AD新建用户、组、OU
  6. sql server Case when 的用法
  7. iOS开发:创建真机调试证书
  8. springMvc中406错误解决,springMvc使用json出现406 (Not Acceptable)
  9. jquery 三种开始写法
  10. ecshop后台根据条件查询后不填充table 返回的json数据,content为空?
  11. mysql 中文配置(转)
  12. 分针网—IT教育: jquery选择器的用法
  13. MySQL连接方式及大小写问题
  14. hdu_3483A Very Simple Problem(C(m,n)+快速幂矩阵)
  15. Tesseract-OCR识别
  16. 满血复活--来自世一大的WAR
  17. R12.2.4 ORA-01017: invalid username/password; logon denied
  18. ES系列十四、ES聚合分析(聚合分析简介、指标聚合、桶聚合)
  19. 尚硅谷面试第一季-14Redis持久化类型及其区别
  20. pychram 2018-01 安装pyQT5报错

热门文章

  1. ado.net与各种orm操作数据方式的比较
  2. c#读取文件
  3. 转载[POJ题型分类]
  4. Typescript 团队合作的利器
  5. iOS中MVVM的架构设计与团队协作
  6. JS特殊符号
  7. WampServer修改端口及菜单Localhost
  8. psql rank row
  9. SharePoint 2013 如何使用TaxonomyWebTaggingControl 控件
  10. python PIL except: IOError: decoder jpeg not available