iOS 对象原理

关于 NSobject

NSobject-> A -> B

1
2
3
struct NSObject_IMPL {
``Class isa; ``// 8个字节
};
1
2
3
4
5
@``interface` `A : NSObject
{
``int` `_no;
``int` `_age;
}
1
2
3
4
5
struct A {
``Class NSObject_IMP NSObject_IVARS;
``int` `_no;
``int` `_age;
};
1
2
3
4
5
struct A {
``Class isa;
``int` `_no;
``int` `_age;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@``interface` `B : A
{
``int` `_birthday;
}
struct B {
``Class NSObject_IMP NSObject_IVARS;
``int` `_no;
``int` `_age;
};
struct B {
``Class isa; (Class NSObject_IMP)
``int` `_no; (NSObject_IVARS)
``int` `_age; (NSObject_IVARS)
``int` `_birthday;
};

内存结构

官方解释图

  • instanceisa指向class
  • classisa指向meta-class
  • meta-classisa指向基类的meta-class

  • classsuperclass指向父类的class如果没有父类,superclass指针为nil

  • meta-classsuperclass指向父类的meta-class,基类的meta-class的superclass指向基类的class

isa(of instance) –> isa(of class) –> isa(of meta-class)

面试题解答

  • 对象的isa指针指向哪里?
  1. instance对象的isa指针指向class对象
  2. class对象的isa指针指向meta-class对象
  3. meta-class对象的isa指针指向基类(也就是NSObject)的meta-class对象
  • OC的类信息存放在哪里?
  1. 对象方法,属性信息,成员变量信息,协议信息,存放在class对象中
  2. 类方法,存放在meta-class对象中
  3. 成员变量的具体值,存放在instance对象中