浅谈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个字节的存储空间。
但位于堆中的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
- 浅谈iOS方法体作用域中的堆和栈
- 方法和作用域中的内部类
- 浅谈在iOS开发中堆和栈的区别
- 浅谈跨域中cookie和session的联系
- 浅谈堆和栈
- 类的作用域问题,形参表函数体处在作用域中,而函数返回类型不一定在作用域中
- 浅谈堆和栈的区别
- 浅谈堆和栈的区别
- 浅谈堆和栈的区别
- 浅谈堆和栈的区别
- 浅谈数据权限的实现方法和作用机制
- Java 方法的作用域中的内部类(不是在“外部类”的作用域中,当然,此处也没有相对的外部类)
- 浅谈Java堆和栈
- Python各种作用域中的函数
- 类作用域中的名字查找
- 作用域中容易忽略的小细节
- c++ 类作用域中的名字查找
- c++ 类作用域中的名字查找
- ARM / Thumb 指令混合编程之代码交织 ( interworking )
- linux ps command useful examples
- 怎么通过Form一次提交多个文件
- 博客处女作
- STM32F4学习笔记8——NIVC向量中断
- 浅谈iOS方法体作用域中的堆和栈
- 函数应用项目1——k次方之和
- 《JVM故障诊断指南》之3 —— Java 线程: JVM持有内存的分析
- React-Native的环境配置与第一个HelloWorld
- Java小程序:模拟双色球开奖
- php面向对象中static静态属性和静态方法的调用
- 拉手网的话题检测与跟踪
- C#之Winform可执行文件和dll打包
- 《JVM故障诊断指南》之4 —— Java 8:从持久代到metaspace