浅谈iOS方法体作用域中的堆和栈

来源:互联网 发布:网络暴力乔任梁 编辑:程序博客网 时间:2024/06/10 20:06
在iOS函数体中,局部变量是放在栈中;

对象是放在堆中,该空间是动态分配的。

当程序检执行完某函数,程序就会跳出该函数的作用域,在栈中的局部变量会自动被回收;但是在堆中的对象需要程序员手动释放(现在ARC了,程序员不需要管理对象释放的问题了)

eg.在如下示例程序中,整型变量a、b和指针变量p都是放在栈中;当程序执行完main函数时,a、b、指针变量p会被释放。
但位于堆中的Person类的(实例)对象不会被释放。需要通过程序员手动释放,当没有任何指针指向该对象时(即:引用计数为0时,OC中通过引用计数的方式记录对象有没有被引用),应该向对象发送releass消息告诉对象要去释放了,对象在释放前会调用dealloc方法。
(JAVA中有垃圾回收机制可以自动检测并释放对象,很遗憾Object-C没有~~好在现在ARC了)
另外:程序为每个引用计数器分配4个字节的存储空间。


 void main( )
{
     int a = 10;
     int b = 20;
     Person * p = [[Person alloc] init];
}
1 0