类创建对象,每个对象在内存中都占据一定的存储空间,每个对象都有一份属于自己的单独的成员变量,所有的对象公用类的成员方法,方法在整个内存中只有一份,类本身在内存中占据一份存储空间,类的方法存储于此。
isa指针
1.每一个对象都包含一个isa指针.这个指针指向当前对象所属的类。
2.[p eat];表示给p所指向的对象发送一条eat消息,调用对象的eat方法,此时对象会顺着内部的isa指针找到存 储于类中的方法,执行。
3.isa是对象中的隐藏指针,指向创建这个对象的类。
4.通过isa指针我们可以在运行的时候知道当前对象是属于那个Class(类)的
内存分区情况
1.代码区:存放函数二进制代码
2.数据区:系统运行时申请内存并初始化,系统退出时由系统释放.存放全局变量、静态变量、常量
3.堆区:通过alloc等函数或new等操作符动态申请得到,需程序员手动申请和释放
4.函数模块内申请,函数结束时由系统自动释放.存放局部变量、函数参数
栈和堆的分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配时便一起完成的,比如局部变量的分配。动态分配由alloc函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。