对象的存储细节、isa指针和内存分区情况

类创建对象,每个对象在内存中都占据一定的存储空间,每个对象都有一份属于自己的单独的成员变量,所有的对象公用类的成员方法,方法在整个内存中只有一份,类本身在内存中占据一份存储空间,类的方法存储于此。

isa指针

1.每一个对象都包含一个isa指针.这个指针指向当前对象所属的类。

2.[p eat];表示给p所指向的对象发送一条eat消息,调用对象的eat方法,此时对象会顺着内部的isa指针找到存 储于类中的方法,执行。

3.isa是对象中的隐藏指针,指向创建这个对象的类。

4.通过isa指针我们可以在运行的时候知道当前对象是属于那个Class(类)的

内存分区情况

1.代码区:存放函数二进制代码

2.数据区:系统运行时申请内存并初始化,系统退出时由系统释放.存放全局变量、静态变量、常量

3.堆区:通过alloc等函数或new等操作符动态申请得到,需程序员手动申请和释放

4.函数模块内申请,函数结束时由系统自动释放.存放局部变量、函数参数

栈和堆的分配方式:堆都是动态分配的,没有静态分配的堆。􏲈􏲖􏲷􏳳􏱮􏹅􏴰􏱲􏵰􏶦􏳮􏹄􏵫􏲆􏲅􏱕栈有2种分配方式:静态分配和动态分配。静态分配时便一起完成的,比如局部变量的分配。动态分配由alloc函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,374评论 0 6
  • 1.写一个NSString类的实现 +(id)initWithCString:(c*****t char *)nu...
    韩七夏阅读 3,805评论 2 37
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,043评论 0 12
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,762评论 0 4
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,014评论 0 7