返回
对象内存结构与创建过程分析
IOS
2023-09-05 12:59:58
对象内存结构分析
首先分析对象的内存结构,我们知道oc的对象指针其实就是结构体指针,也就是说oc的对象转成c++代码后其实就是一个结构体。定义一个简单的类代码如下:
@interface Person : NSObject
{
NSString *name;
int age;
}
- (void)say;
@end
先忽略say方法的存在(方法跟结构体的isa指针相关,稍后再分析),可以看出来 struct Person_IMPL
的结构体定义如下:
struct Person_IMPL {
Class isa;
NSString *name;
int age;
};
其中 isa
指针指向该对象的类对象,name
和 age
是该对象的成员变量。对象的内存结构如下图所示:
+---------------------+
| isa指针 |
+---------------------+
| name指针 |
+---------------------+
| age |
+---------------------+
对象创建过程
当我们创建一个对象时,系统会首先分配一块内存空间,然后将对象的isa指针指向该对象的类对象,并将对象的成员变量初始化为默认值。对象创建过程如下图所示:
分配内存空间
↓
将isa指针指向类对象
↓
初始化成员变量
↓
返回对象指针
接下来,我们通过代码示例来详细说明对象分配和初始化过程:
// 分配内存空间
Person *person = [[Person alloc] init];
// 将isa指针指向类对象
person->isa = [Person class];
// 初始化成员变量
person->name = @"小明";
person->age = 20;
// 返回对象指针
return person;
方法的实现
方法的实现与对象的内存结构息息相关。方法其实是一个函数指针,指向一个实现该方法的函数。当我们调用一个对象的方法时,系统会根据对象的isa指针找到该方法的实现,然后调用该函数。方法的实现如下图所示:
+------------------------+
| 方法名 |
+------------------------+
| 函数指针 |
+------------------------+
总结
通过本文的分析,我们对oc对象的内存结构及其创建过程有了更深入的了解。对象内存结构由isa指针和成员变量组成,对象创建过程包括分配内存空间、将isa指针指向类对象、初始化成员变量和返回对象指针。方法的实现与对象的内存结构息息相关,方法其实是一个函数指针,指向一个实现该方法的函数。