OC基础复习之对象的存储细节
Posted 忆缘晨风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC基础复习之对象的存储细节相关的知识,希望对你有一定的参考价值。
1.内存分为5大区:栈区,堆区,Bss段,数据区,代码区(排序方式:由高地址-->低地址)
其中注意:栈区对象的地址分配是先分配高地址,再分配低地址,(通俗讲就是在栈区中存的变量,先从地址高的开始往下存)
堆区是从低地址开始分配,再分配到高地址 如下图;
栈区:存储局部变量
堆区:存储程序运行的过程中动态分配的内存空间(通俗的理解就是实例对象,例如:Person *p = [Person new],这块内存空间就是指针变量p指向的这个空间)
Bss段:存储未初始化的全局变量和静态变量
数据区:存储已经初始化的全局变量和静态变量和常量
代码区:存储函数体的二进制代码
类创建对象,每个对象在内存中都占有存储空间,每个对象都有
一份属于自己的单独的成员变量
每个对象都包含一个isa指针,这个指针指向当前对象所属的类
给成员变量赋值:图解:
byd->_speed = 120;
程序会先找到byd对象(指针变量),然后通过指针指向的地址找到成员变量_speed,继而给成员变量赋值
通过对象去调用方法:
这个时候会用到isa指针,isa指针会指向当前对象所属的类,即会指向代码区(代码区存放的是以二进制形式存放的当前类的代码)
byd对象实际上就是调用的代码区的run方法
- UTF-8 国际通用编码,一个汉字占3个字节 (Xcode默认格式)
- GB2312 国内标准 一个汉字占两个字节 GBK
未完待续.........................
以上是关于OC基础复习之对象的存储细节的主要内容,如果未能解决你的问题,请参考以下文章