1. 全局变量:
- 要在函数外面声明
- 可以跨文件访问
- 声明时可以赋值 默认初始值为0
- 储存在【全局(静态)存储区static】
extern关键字extern varName代表的是varName是调用外部声明的变量
2. 静态变量
- 可以在函数外部声明、亦可在函数外部声明
- 仅在声明文件内访问、不可以改变局部变量的作用域
- 声明时关键字为
static - 声明时可以赋值 默认初始值为0
- 储存在【全局(静态)存储区static】、只有一份内存
- 可以延长变量的生命周期
3. 局部变量
- 要在函数内部声明
- 运行到该函数时才会分配内存
- 只在声明变量的函数内部访问
- 一般数据类型储存在栈帧中,new init开头的方法初始化的对象储存在堆上。
4. const关键字
- 修饰关键字右边的变量
- 修饰后变量为只读
- 场景🌰:提供一个方法,放入参数是某个变量的地址,方法内部不能修改地址(在诸多Foundation框架提供的API中可以看到这个场景的应用)
5. 内存分区
- 栈区:
- 堆区:
- 全局区:
- 文字常量区
- 程序代码区
题外话
结合看过的博客,自己在实践的过程当中发现,NSString 比较特殊,并不完全如其他对象,是分配在堆区的。
update:在objc的源码中经常可以看到isTargetPointer这样的判断,由此知道了NSTargetPointer这样的特殊类型,笔记请看[NSTargetPointer]