首页 > 代码库 > OC基础复习(二)之对象的存储细节

OC基础复习(二)之对象的存储细节

1.内存分为5大区:栈区,堆区,Bss段,数据区,代码区(排序方式:由高地址-->低地址)

其中注意:栈区对象的地址分配是先分配高地址,再分配低地址,(通俗讲就是在栈区中存的变量,先从地址高的开始往下存)

    堆区是从低地址开始分配,再分配到高地址  如下图;

栈区:存储局部变量

堆区:存储程序运行的过程中动态分配的内存空间(通俗的理解就是实例对象,例如:Person *p = [Person new],这块内存空间就是指针变量p指向的这个空间)

Bss段:存储未初始化的全局变量和静态变量

数据区:存储已经初始化的全局变量和静态变量和常量

代码区:存储函数体的二进制代码

 

技术分享

类创建对象,每个对象在内存中都占有存储空间,每个对象都有

一份属于自己的单独的成员变量

每个对象都包含一个isa指针,这个指针指向当前对象所属的类

给成员变量赋值:图解:

byd->_speed = 120;

程序会先找到byd对象(指针变量),然后通过指针指向的地址找到成员变量_speed,继而给成员变量赋值

 技术分享

通过对象去调用方法:

这个时候会用到isa指针,isa指针会指向当前对象所属的类,即会指向代码区(代码区存放的是以二进制形式存放的当前类的代码)

byd对象实际上就是调用的代码区的run方法

 

技术分享

  1. UTF-8 国际通用编码,一个汉字占3个字节  (Xcode默认格式)
  2.  GB2312  国内标准  一个汉字占两个字节  GBK

未完待续.........................

 

OC基础复习(二)之对象的存储细节