/*

先了解下内存五大区域和类加载

1.内存中的五大区域

栈---局部变量,当局部变量的作用域,被执行完毕之后,这个局部变量就会被系统立即回收

堆---程序猿手动申请的字节空间,Malloc calloc realloc

BBS段----未被初始化的全局变量和静态变量  一般初始化就回收,并转存到数据段中

数据段(常量区)----已经被初始化的全局静态变量常量数据,知道程序结束的时候才会被回收

代码段----存储代码,存储程序的代码

2.类加载

a。在创建的时候,肯定是需要访问类的

b。声明一个类的指针变量也会访问类的

在程序运行期间,当某个类第一次被访问到的时候,会将这个类存储到内存中的代码段区域,这个过程,叫做类加载

只有类第一次被访问的时候,才会做类加载。一旦类被加载到代码以后,知道程序结束以后,才会被释放。

如图---

内存当中,在内存中究竟是如何存储的

假设这个代码写在函数中

Person *p1 = [Person new];

a--- Person *p1  会在栈的内存中申请一块空间,是Person类型的指针变量p1.所以这个p1是个指针变量,只能存储地址

如图2

[Person new];  真正在内存中创建代码的是这一句

1.在堆内存中申请合适的空间,在空间中,根据类的模板,创建对象。

2.类模板中定义了什么属性,就把这些属性声明再这些对象之中

对象还有个属性叫做isa,是一个指针,指向对象属性的类,再代码中的地址。

3.初始化对象的属性

如果属性的类型是基本数据类型,那么就是赋值0

如果属性是C语言中的指针类型,那么就是NULL

如果属性是OC语言中的,那么是nil

4.返回对象的地址

注意:对象中只有属性,没有方法,自己类的属性,外加一个isa指针,指向代码段中的类。

如何访问对象的属性:指针名字->属性名(根据指针,找到指针指向的对象,再找到对象中的属性来访问)

如何调用方法:现根据指针的找到对象,对象发现要调用方法,在分局对象的isa指针找到类,然后调用类里面的方法

为什么不把方法存储在对象之中:因为一个对象的方法代码实现是一模一样,就没必要为每个对象保存一个方法,这样提浪费空间,所以只保留1分就行了

p1 p2 的isa 指针是相同的

*/

#import <Foundation/Foundation.h>

@interface Person : NSObject

{

@public

NSString *_name;

int _age;

}

-(void)sayHI;

@end

@implementation Person

-(void)sayHI

{

NSLog(@"嘀嘀嘀,开车了");

}

@end

int main(int argc,const char * argv[]) {

@autoreleasepool {

Person *p1 = [Personnew];

Person *p2 = [Person new];

p1->_age =18;

NSLog(@"p1==%p",p1);

[p1 sayHI];

NSLog(@"Hello, World!");

}

return0;

}

对象在内存中是如何存储的(内存五大区域和类加载)相关推荐

  1. 类和对象在JVM中是如何存储的,竟然有一半人回答不上来!

    前言 这篇博客主要来说说类与对象在JVM中是如何存储的,由于JVM是个非常庞大的课题,所以我会把他分成很多章节来细细阐述,具体的数量还没有决定,当然这不重要,重点在于是否可以在文章中学到东西,是否对J ...

  2. 转载——C语言中float,double类型,在内存中的结构(存储方式)

    最近在做一个数据格式分析和转换的项目,第一次接触底层的二进制代码存储,看的一头雾水,看到这个帖子后对于在Windows系统下数据的存储方式有了更多的了解,将原文分享一下: 原文地址为http://ww ...

  3. @清晰掉 C++ 中的 enum 结构在内存中是怎么存储的?

     C++ 中的 enum 结构在内存中是怎么存储的? C++ C++ 中的 enum 结构在内存中是怎么存储的?里面存储的是常量值吗? 关于占用内存的大小,enum类型本身是不占内存的,编译器直接替换 ...

  4. 常见数据结构在内存中是怎么存储的

    三人行,必有吾师,欢迎加入星球,一起讨论技术点滴 前言: 在开发中,经常用到数组,ArrayList,HashMap等,他们在内存中是怎么存储的呢? 其实在他们在申请内存时,要么是一块连续的内存,要么 ...

  5. C语言学习(十一)小数在内存中是如何存储的?定点数与浮点数各自的优势在哪?规格化浮点数与非规格化浮点数又表示什么?

    C语言学习(十一)小数在内存中是如何存储的?定点数与浮点数各自的优势在哪?规格化浮点数与非规格化浮点数又表示什么? 浮点数与定点数 小数在内存中以浮点数形式存储.浮点数并不是一种数值分类,他和整数.小 ...

  6. 计算机中小数如何储存,小数在内存中是如何存储的?

    小数在内存中是如何存储的? 文本关键字:小数.float.double.浮点数.精度 一.IEEE 754(二进制浮点数算术标准) 在学习进制转换时,我们了解到:我们经常使用的十进制数是转换为二进制进 ...

  7. java内存中读文件_关于内存管理:读取Java中的大文件

    我需要一个非常了解Java和内存问题的人的建议. 我有一个大文件(大约1.5GB),我需要将此文件切成许多小文件(例如100个小文件). 我通常知道如何做到这一点(使用BufferedReader), ...

  8. 对象在内存中是如何存储的

    内存五大区域 栈---局部变量,当局部变量的作用域,被执行完毕之后,这个局部变量就会被系统立即回收 堆---程序猿手动申请的字节空间,Malloc calloc realloc BBS段----未被初 ...

  9. C语言中float,double类型,在内存中的结构(存储方式).

    从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度. 任何数据在内存中都是以二进制(0或1)顺序 ...

最新文章

  1. 编程题:两个数比较大小,之后用变量t互换。
  2. 网络嗅探与欺骗(FTP部分)
  3. C 语言的实际运用 ---150809124
  4. css3制作炫酷导航栏效果 转
  5. CSS Hack 汇总速查一览
  6. java多线程系列13 设计模式 Future 模式
  7. linux 安装qt 4.6软件,QT学习之一:Linux下安装QT之版本qt-4.6.3
  8. linux gst-launch 播放视频旋转,【视频开发】Gstreamer中一些gst-launch常用命令
  9. 贪 心 学用markdown
  10. 工作资讯002---FaaS和PaaS的关系_Iaas_Paas_Saas
  11. 计算机辅助设计与图像学学报 改后发表,几种常见图像二值化方法的结果对比与分析...
  12. 基于TI DRV8424驱动步进电机实现调速和行程控制
  13. IE主页被2345(782782)篡改解决办法
  14. BlackBerry Internet Service故障:公司内部同事无法互通邮件,对外联络没有问题
  15. clustalw序列比对_几个多序列比对软件:Muscle,ClustalW和T
  16. nagios监控华为5700交换机
  17. 蛙蛙推荐:蛙蛙牌关键词提取算法
  18. 计算时间复杂度--(简单版)
  19. 优秀的 DevOps Pro 需具备的7种基本软技能
  20. 逆战班---《JS操作汉字时钟详解》

热门文章

  1. 04_MySql数据查询语言DQL之常见函数
  2. 使用python库elasticsearch操作es
  3. vpython_Vpython简单例子
  4. Flexsim Database Connectors连接数据库
  5. matlab的折线图导出矢到cad,matlab2015画出图形导出CAD脚本在哪
  6. mysql htop大量进程,htop与dstat
  7. PYCHARM SHOTCUT
  8. 现代控制理论(3)——线性控制系统的能控性和能观性
  9. 主叫号码信息识别及传送
  10. 【TS基础】变量声明