OC底层详解

本文主要探讨了Objective-C并非纯粹的面向对象语言,而是C语言的扩展,OC = C + Runtime。文章详细介绍了Runtime下的objc-class,包括Class的定义、初始化过程以及Runtime下对Class的关键操作,特别强调了initialize方法的调用时机和Class的重要函数。
摘要由CSDN通过智能技术生成

前言:iOS的开发语言objective-c,它的真实面目是它不是真正的面向对象语言,而抽象理解为此而已。其实它就是C+,有个公式可以很好地诠释那就是

OC = C + Runtime; 接下来我们就好好讲讲在Runtime下的objc-class。准备资料,objc4-646/runtime。

一:Class定义

1.1 小小说明一下objc-api.h里的OBJC_ISA_AVAILABILITY:

/*介绍一下__attribute__((deprecated))的作用,__attribute是给函数、变量、类做属性说明的关键字,deprecated是弃用原先的进行兼容

若是__OBJC2__,原先的类,编译器发出警告*/

1
2
3
4
5
6
7
#if !defined(OBJC_ISA_AVAILABILITY)
#   if __OBJC2__
#       define OBJC_ISA_AVAILABILITY  __attribute__((deprecated))
#   else
#       define OBJC_ISA_AVAILABILITY  /* still available */
#   endif
#endif
1
2
3
4
typedef struct objc_method *Method;
typedef struct objc_ivar *Ivar;
typedef struct objc_category *Category;
typedef struct objc_property *objc_property_t;

1.2 接下来就是runtime.h里的Class的定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct objc_class {
     Class isa  OBJC_ISA_AVAILABILITY; //每个Class都有一个isa指针
     
#if !__OBJC2__
     Class super_class                                        OBJC2_UNAVAILABLE; //父类
     const char *name                                         OBJC2_UNAVAILABLE; //类名
     long version                                             OBJC2_UNAVAILABLE; //类版本
     long info                                                OBJC2_UNAVAILABLE; //!*!供运行期使用的一些位标识。如:CLS_CLASS (0x1L)表示该类为普通class; CLS_META(0x2L)表示该类为metaclass等(runtime.h中有详细列出)
     long instance_size                                       OBJC2_UNAVAILABLE; //实例大小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值