一、五大内存区域 & 自由存储区
1 栈
变量存储区(局部变量,函数参数等)
创建时编译器自动分配,不需要时自动清除
2 堆
由new alloc 创建的对象
释放:new <-> release,引用计数为0时系统销毁对象, ARC自动释放,MRC手动释放
3 全局/静态存储区
全局变量 静态变量
4 常量存储区
常量
5 代码区
函数的二进制代码
6 自由存储区
由mallo等分配的内存块。
free结束生命。
二、变量
1 static静态变量
1.1 全局
- 优点:对象方法和类方法均可访问和修改,外部类无法调用,定义后只会只想固定的指针地址,供所有对象使用,节省空间
- 缺点:存在的生命周期长,从定义直到程序结束
1.2 局部
只能在给局部代码块中使用。
与全局仅作用域不同。
2 extern全局变量
2.1 对内
.h中没有extern修饰,和全局静态变量一样
2.2 外部
- 优点:除了该类,其他文件也可以访问
- 缺点:存在的生命周期长,从定义直到程序结束,并且外部可以修改,出现错误不易定位
- note:使用全局变量的原因就在于其对外的特性,但是其使用的方便性没有使用model的属性或宏来得方便。程序启动的时候会单独加载全局变量,同理与全局静态变量,少使用。
全局静态变量与全局变量其实本质上是没有区别的,只是存在修饰区别,一个static让其只能内部使用,一个extern让其可以外部使用
三、const常量
- 优点:只可以读取不可以修改
- 缺点:存在的生命周期长
四、属性标识符
1. @synthesize
编译时自动生成getter/setter,手动生成不报错
2. @dynamic
用户自己生成getter/setter,若没有手动生成不报错,但是运行时调用会崩溃。(OC具有动态绑定特性,运行时才确认具体调用方法)
3. @property
(未完待续)