Objective-C 底层数据类型分析(一)
来源:互联网 发布:python数组最大值下标 编辑:程序博客网 时间:2024/05/17 22:19
写了这么多OC代码,对OC的底层实现还是理解不透,遇到一些疑惑还是无法解释为什么是那样,要理解OC的底层实现,首先需要对OC底层使用的数据类型有一定的了解,下面逐一分析。
声明:需要对C语言的数据结构有些了解才能更好的理解下面的内容。
一、类 Class
Class是OC中的一种数据类型,进入系统头文件objc/objc.h,可以看到Class实际上是一个typedef之后的结构体指针,如下,
// An opaque type that represents an Objective-C class.typedef struct objc_class *Class;
那么结构体 struct objc_class 内部包含哪些成员变量呢?再进入objc/runtime.h ,内部结构如下
struct objc_class { Class isa; // 指向metaclass(metaclass 后面解释) Class super_class ; // 指向其父类 const char *name ; // 类名 long version ; // 类的版本信息,初始化默认为0,可以通过runtime函数class_setVersion和class_getVersion进行修改、读取 long info; // 一些标识信息,如CLS_CLASS (0x1L) 表示该类为普通 class ,其中包含对象方法和成员变量;CLS_META (0x2L) 表示该类为 metaclass,其中包含类方法; long instance_size ; // 该类的实例变量大小(包括从父类继承下来的实例变量); struct objc_ivar_list *ivars; // 是一个结构体指针,指向第一个成员变量的,通过ivars可以访问所有的成员变量 struct objc_method_list **methodLists ; // 存储类的方法的地址 struct objc_cache *cache; // 指向最近使用的方法的指针,用于提升效率; struct objc_protocol_list *protocols; // 存储该类遵守的协议 } /* Use `Class` instead of `struct objc_class */
可以看出,Class本质上是一个结构体,保存着类的各种信息。
二、对象
1)先了解一下最纯洁,最基本的类,NSObject,进入objc/object.h里面可以看到如下
@interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY;}NSObject类只有一个成员变量。isa指针,这个指针就是指向上面所讲的struct objc_class 结构体,isa指针占8个字节的内存空间。
2)自定义类的结构
定义一个Person类
@interface Person : NSObject@property (nonatomic, copy) NSString *name;@property (nonatomic, assign) double weight;@property (nonatomic, assign) double height;@end
创建一个Person对象
Person *person = [[Person alloc] init]; person.name = @"haha"; person.weight = 50.9; person.height = 170; NSLog(@"==Person===%@", person);
在Console中输入p *person,可以看到Xcode输出一下内容
可以看出person实例有四个成员变量,第一为isa指针,继承自NSObject;其他三个位自己独有的成员变量。isa指向Person类,平时通过 [Person Class]得到的就是isa指针。
0 0
- Objective-C 底层数据类型分析(一)
- Objective-C底层数据结构
- Objective-C底层数据结构
- Objective-C底层数据结构
- Objective-C底层实现
- Objective-C底层数据结构
- Objective-C底层数据结构
- iOS-Objective-C 学习笔记一:数据类型
- Objective-C 的底层实现
- Objective-C Runtime 底层机制
- Objective-C 2.0数据类型
- Objective-C基本数据类型
- objective-c基本数据类型
- objective-C 数据类型转换
- Objective-C中的数据类型
- Objective-c 数据类型
- Objective-C语言:数据类型
- Objective-C 2.0数据类型
- python 第十一周 python条件与循环语句
- JSON-lib与Google-gson比较
- STL hashmap
- 初识nodeJs
- 对于可信QoS的服务聚类调研
- Objective-C 底层数据类型分析(一)
- 四轴PID讲解
- C语言函数返回整形数组
- ps 基础--老贺
- HW比赛之环境搭建
- 关于Xcode插件更新
- android 垂直两级ListView联动
- myBatis学习笔记(6)——动态SQL & 模糊查询
- 仿照新浪微博评论的实现