您的位置:首页 > 移动开发 > IOS开发

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

2016-05-12 11:10 302 查看
在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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: