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

在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值