返回
苹果isa、类isa和元类的底层原理解析
IOS
2023-11-21 23:08:32
isa:类的实例变量
isa的存储位置
-
变量中的存储位置
-
obj.isa ->类的实例
-
isa就是class,class就是isa,是等同关系
isa的存储作用
-
判断变量所属类
-
调用classMethod
类isa:元类
类isa的存储位置
-
一般存储在一个叫metaClass的全局变量
-
isa->Class->metaClass
-
isa->metaClass-> isa->Class->metaClass
-
类的isa可以理解成一个指向自身的指向
类isa的存储作用
- 类isa主要存储的是class的实例变量的类型信息,比isa要丰富
苹果isa:根类
苹果isa的存储位置
-
系统会存储一个指向本身的指针
-
根类的metaClass是空的
苹果isa的存储作用
- 作为isa查找的终结条件
示例代码:
@interface TestProto : NSObject
{
}
@interface Test1 : TestProto
{
@end
}
@interface Test2 : TestProto
{
@end
}
// 执行 isa 等于类型时
Test1 *a = [[Test1 new] autorelease];
Test2 *b = [[Test2 new] autorelease];
TestProto *c = [[TestProto new] autorelease];
if (c==a) {
NSLog(@"c == a");
}else{
NSLog(@"c != a");
}
if (c==b) {
NSLog(@"c == b");
}else{
NSLog(@"c != b");
}
isa、类isa、元类的区别:
内存 :占用空间比较大的是metaClass
- isa
- metaClass
- isa->metaClass
- isa->metaClass->isa
isa->metaClass->isa有循环
内存占用关系:
-
根类占用空间最小
-
isa占一个int
-
metaClass占用最大
执行效率:
-
metaClass的查找效率最高
-
isa的查找效率次之
-
is的查找效率最低
结论:
-
通过对isa、类isa、元类的分析,我们能够深入了解编程的重要概念和细节。本文提供的代码示例有助于读者更直观和深入的理解这些内容,以便他们在编码时能够更合理和高效地运用。
-
此外,理解这些内容也是软件设计和编程技巧的重要组成部分。掌握isa、类isa和元类等方面的深入信息对于软件工程师来说非常宝贵,同时也是持续学习和进步的必要条件。
-
掌握isa、类isa、元类,对于理解和编写有效的代码、发现和解决代码错误等非常重要,也是编写出更好代码所必需的。
-
学习这些内容对刚开始接触编程的新手来说,也许不是那么容易的一件事,但这是一个非常宝贵的学习过程,对于软件工程师来说很有必要的。