day02-类加载

//
//  main.m
//  Day02_ 类加载
//
//  Created by imac on 2020/9/8.
//  Copyright © 2020 imac. All rights reserved.
//
/*
 1.内存中的五大区域
 
  栈  存储局部变量
  堆。 存储程序员手动申请的字节空间。malloc。calloc realloc函数
 BSS段。存储未被初始化的全局变量 静态变量
 数据段(常量区) 存储已经被初始化的全局变量 静态变量 常量数据
 代码段 存储代码。存储程序的代码
 
 
 2. 类加载
  1 )在创建对象的时候,肯定是需要访问类的
   2)声明一个类的指针变量也会访问该类
 程序在运行期间,当某个类第一次被访问到,会将这个类会把存储到内存中的代码段区域 这个过程叫做类加载
 只有类在第一次被访问的时候才会做类加载
 一旦类被加载到代码段以后,只有程序结束才会被释放
 
 3  对象在内存中如何存储
 
   Person *p1 = [Person new];
 
   Person *p1
    在栈内存中申请一块空间 声明了一个Person类型的指针变量p1
   p1为指针变量。所以只存储地址
 
   [Person new] 真正在内存中创建对象其实是这句
 
      new 做的事情
 
       a在堆内存中申请一块合适大小的空间
       b在这个空间当中根据类的模版创建对象
           类模版当中定义什么属性 就把这些属性依次声明在对象中
           对象中还有另一个属性叫isa 是一个指针  指向对象所属的类在代码段中的地址
        c初始化对象的属性
         如果属性的类型是基本数据 那么值就是0
                      C语言的指针数据类型,那么赋值为NULL
                      OC的类指针类型,那么就赋值为nil
         d返回对象的地址
 3 注意
  a对象里面只有属性 没有方法 自己类的属性外加isa指针指向代码段中的类
  b 如何访问对象的属性
     指针名->属性名;
   根据指针。找到指针的对象。再找到对象中的属性来访问
 c 如何调用方法
 [指针名 方法名];
  先根据指针名找到对象,对象发现要调用这个方法,再根据对象的isa来找的这个类
  然后调用类里面的方法
 
 4为什么不把方法存储在对象中
     因为每个对象的代码都是一模一样的。没有必要每个对象都保存一个方法 这样的话空间太浪费了
     既然都一样 那就保存一份就好了
 
 5对象属性的默认值
 创建一个对象属性 没有赋值,会有默认值
 
 如果属性的类型是基本数据 那么值就是0
 C语言的指针数据类型,那么赋值为NULL
 OC的类指针类型,那么就赋值为nil
 
 
 
 
 */

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值