堆和栈

2020-04-02  本文已影响0人  Small_Potato

引入堆和栈的区别

1.按照惯例方式区分

2.按照分配方式区分

注意:iOS一个进程中栈内存只有1M,Mac也只有8M;

问题

1.为什么OC对象需要进行内存管理,而其它非对象类型比如基本数据类型就不需要进行内存管理呢?
2.只有OC对象才需要进行内存管理的本质原因?

OC中的对象在内存中是以堆的方式分配空间,并且对的内存是由程序员来释放的
OC对象存放于堆里面(堆内存要程序员手动回收)
非OC对象一般放在栈里面(栈内存会被系统自动回收)
堆里面的内存是动态分配的,所以也就需要程序员手动的去添加内存、回收内存

注意:通常以这种方式创建对象:
NSObject *obj = [[NSObject alloc] init];
系统会在(\color{red}{栈上存储obj这个指针变量,它所指的对象在堆中}).通过[NSObject alloc]系统会为其在堆中开辟一块内存空间,并为其生成NSObject所需内存结构布局.

堆和栈的对比

栈对象
优点:1. 高速,在栈上分配内存是非常快的.2. 简单,栈对象有自己的生命周期,你永远不可能发生内存泄露.因为他总是在超出他的作用域时被自动销毁了.

缺点:栈对象严格的定义了生命周期也是其主要的缺点,栈对象的生命周期不适于Objective-C的引用计数内存管理方法.

上一篇 下一篇

猜你喜欢

热点阅读