静态变量、局部变量、实例变量

静态变量: 也称为类变量!在程序加载时系统就为它在堆中开辟了内存,堆中的内存地址存放于栈以便于高速访问。静态变量的生命周期--一直持续到整个"系统"关闭。 (待考量)

实例变量:当你使用关键字alloc的时候,系统在堆中开辟并不一定是连续的空间分配给变量(比如说类实例),然后根据零散的堆内存地址,通过哈希算法换算为一长串数字以表征这个变量在堆中的"物理位置"。 实例变量的生命周期--当实例变量的引用丢失后,将被GC(垃圾回收器)列入可回收“名单”中,但并不是马上就释放堆中内存。


 局部变量:由声明在某方法,或某代码段里(比如for循环),执行到它的时候直接在栈中开辟内存并使用的。当局部变量脱离作用域,存放该作用域的栈指针,栈顶与栈底重合即为释放内存,速度是非常快的。

       局部变量是在函数或方法中的变量,实例变量指的是类的一个实例,就是一个对象, 成员变量就是类中的变量(不是方法中的变量!), 类变量是类中的静态变量。
  局部、实例、成员变量的作用域和生存周期同局部变量一样,而类变量如果用public声明则作用域同全局变量,如果是private则作用域只在类的内部生存周期同全局变量.成员方法和类方法跟局部变量和类变量的关系一样.
 
 
 

1.栈 - 由编译器自动分配释放 


2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收

 
3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放

 
4.另外还有一个专门放常量的地方。- 程序结束释放

 
 
iOS类的成员变量有俩种:

一种是被static关键字修饰的变量,叫类变量或者静态变量;
另一种没有static修饰,为实例变量。

类的静态变量在内存中只有一个,在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。

而实例变量取决于类的实例。每创建一个实例,就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。


你可能感兴趣的:(编程理论)