美文网首页iOS基础知识
OC基础学习:对象在内存中是如何存储的?

OC基础学习:对象在内存中是如何存储的?

作者: Andy_Ron | 来源:发表于2017-10-26 16:45 被阅读30次

例:Person *p1 = [Person new];

  1. Person *p1; 会在栈内存中申请一块空间,在栈内存中声明1个Person类型的指针变量p1。p1是一个指针变量,那么只能存储地址。
  2. [person new]; 真正在内存中创建对象的其实是这句代码。
  3. new方法在堆内存中创建一块合适大小的空间,然后在空间中根据类的模板创建对象。
    类模板中定义了什么属性,就把这些属性依次声明在对象之中。
    对象中还有另外一个属性,叫做isa ,是一个指针,指向对象所属的类在代码段中的地址。
  4. 初始化对象的属性,给对象的属性赋默认值。
    如果属性的类型是基本数据类型,那么就赋值为0。
    如果属性的类型是c语言的指针类型,那么就赋值为NULL。
    如果属性的类型为OC语言的类指针类型,那么就赋值为nil。
  5. 注意
    1). 对象中只有属性没有方法,属性包括自己类的属性,外加一个isa指针指向代码段中的类。
    2). 如何访问对象的属性,指针名->属性名
    根据指针,找到指针指向的对象,在找到对象中的属性来访问。
    3). 如何调用方法。[指针名 方法名];
    先根据指针名找到对象,对象发现要调用方法,在根据对象的isa指针找到类。然后调用类里的方法。
    4). 为什么不把方法存储到对象之中。
    因为每一个对象的方法的代码实现都是一模一样的,没有必要为每一个对象都保存一个方法,这样的话就太浪费空间了,既然都一样,那么就只保存一份在代码段中。
    5). 对象属性是有默认值的。

参考: OC-基础总结(一)

相关文章

  • OC基础学习:对象在内存中是如何存储的?

    例:Person *p1 = [Person new]; Person *p1; 会在栈内存中申请一块空间,在栈内...

  • iOS 内存管理(一)

    内存分配 在iOS中,数据是存储在堆和栈上的,堆上的内存需要管理,栈上的内存并不需要。 非OC对象(基础数据类型)...

  • Foundation框架---数组

    OC 数组特点: 可以存储不同类型的对象,oc的数组 只能存储对象 数组可以遍历,占用的内存空间是连续的. oc中...

  • OC:内存管理

    目录 内存管理原理 自动释放池 内存管理原则 程序运行过程中要创建大量的对象,OC中对象是存储在堆中的,系统不会自...

  • 重学iOS系列之底层基础(一)OC对象的本质

    导读 在开发过程中,是否有疑惑过,我们创建的OC对象本质到底是什么?实例对象在内存中是怎么存储的?对象在程...

  • 内存管理

    概述 程序在运行过程中会创建很多的对象,oc中的对象都是存储在堆空间中的,系统不会自动释放堆空间中的内存。 oc中...

  • OC反汇编

    OC对象在内存中的存储 ARC下对象的管理 汇编中,编译器调用了objc_storeStrong方法,在objc源...

  • [CH2-Q1]Objective-C的对象——实例对象、类对象

    在CH1-Q1和CH1-Q2两个小节中,我们学习了OC实例对象的本质,并且能够掌握OC实例对象在内存是如何分配的,...

  • iOS中OC对象的本质

    一个OC对象在内存中如何布局?以及一个NSObject对象占用多少内存? 我们知道OC的底层语言是c/c++我们平...

  • 内存管理

    1. 内存管理. 2. 内存中的五大区域. 3. 存储在在堆中的OC对象. 4. 内存管理的范围: 5. 对象什么...

网友评论

    本文标题:OC基础学习:对象在内存中是如何存储的?

    本文链接:https://www.haomeiwen.com/subject/hgpkpxtx.html