对象在内存中的存储

  1. 类加载

    1. 创建对象的时候,肯定是需要访问类的
    2. 申明1个类的指针变量 也会访问类
    3. 只有类在第一次被访问的时候,才会做类加载
      一旦类被加载到代码段以后,直到程序结束的时候才会被释放
      代码段中: 主要是存储person类的代码(类的声明和类实现)

    假设 下面这个代码写在函数之中
    • Person *p1 ;会在栈内存中申请一块空间,在栈内存中声明了一个person类型的指针变量p1.
    p1是一个指针变量,只能存储地址

    • [Person new];真正在内存中创建对象的是这句代码。
    ○ new做的事情
    § 在堆内存中申请一块合适大小的空间
    § 在这个空间中根据类的模板创建对象
    □ 类模板中定义了什么属性,就把这些属性依次的声明在对象之中。对象中还有另外一个属性,叫做isa 指针,指向对象所属的类在代码段当中的地址
    § 初始化对象的属性(付默认值)
    □ 如果是属性的类型是基本数据类型,那么就赋值为0
    □ C语言的指针类型:NULL
    □ OC类指针类型 nil
    § 返回对象的地址

    • 注意:
    ○ 对象中只有属性 而没有方法,自己类的属性外加一个isa指针指向代码段当中的类。
    ○ 如何访问对象的属性
    § 指针名->属性
    § 根据指针 找到指针指向的对象 再找到对象中得属性来访问
    § 如何调用方法:
    [指针名 方法名];
    先根据指针名找到对象,对象发现要调用方法,再根据对象的isa指针找到类

    • 为什么不把方法存储在对象之中?
    ○ 因为每一个对象的代码的实现都是一模一样的,没有必要为每一个对象都保存1个方法,这样的话,太浪费空间了,既然都一样,那么只保存一份。
    • 对象的属性的默认值
    ○ 创建一个对象,没有为对象的属性赋值,那么这个对象的属性是有值的
    § 基本数据类型 0
    § c指针类型 NULL
    § OC 指针 nil

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值