整理一下内存知识:
先看几个关键字: const static extern
一、const 和 宏
const是在编译阶段(编译检查会报编译错误),define是预编译阶段(没有类型,不做检查单纯替换)。宏可以定义函数、方法等 ,const不可以。 大量的宏会造成编译时间久(二进制文件变大)。
全局常量:外界可以访问。NSString const*test=@"hello";
局部变量:用static修饰,不能供外界访问。static const NSString*test=@"hello";
二、内存区域
(1)、栈:分静态分配和动态分配。由编译器自动分配并释放,存放函数的参数值,局部变量等。
静态分配由编译器完成,比如(auto)分配
动态由alloc函数完成,无需释放(自动管理)没有释放函数 不被鼓励的
优点:快速高效
缺点:有大小限制,数据不灵活。
(2)、堆:由程序员分配和释放。iOS中alloc都存放在堆区。动态分配
优点:灵活方便
缺点:效率有一定的降低
(3)、代码区:存放函数的二进制代码
(4)、全局区(静态区):全局变量和静态变量的存放地 初始化和未初始化放在相邻的一块区域上。
(5)、文字常量区:存放常量字符串。程序 结束系统释放。
三、block
按照存储位置的不同,block被分为三种:
(1)、栈区block __NSStackBlock__
(2)、堆区block __NSMallocBlock__
(3)、全局区blcok __NSGlobalBlock__