美文网首页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基础学习:对象在内存中是如何存储的?

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