相关概念

    • 当程序执行某个方法(或函数)时,会从内存中名为(stack)的区域分配一块内存空间,这块内存空间称为(frame)。帧负责保存程序在方法内声明的变量的值。在方法内声明的变量称为局部变量(local variable)。
    • 当某个应用启动并运行main函数时,它的帧会被保存在栈的底部。当main调用另一个方法(或函数)时,这个方法的帧会压入栈的顶部。被调用的方法还可以再调用其它方法,以此类推,最终会在栈中形成一个塔状的帧序列。当被调用的方法结束时,程序会将其帧从栈顶“弹出”并释放。如果同一个方法再次被调用,则应用会创建一个全新的帧,并将其压入栈的顶部。
    • (heap)是指内存中的另一块区域,和栈是分开的。为这两类内存区域分别取名堆和栈,是为了能够形象地描述这两个概念。栈会按后进先出的规则保存一组帧,而堆则包含了大量无序的活动对象,需要通过指针来保存这些对象在堆中的地址。
  1. 对象所有权

    • 指针变量暗含了对其所指向的对象的所有权(ownership)。当某个方法有一个指向某个对象的局部变量时,可以称该变量拥有(own)该变量所指向的对象。当某个对象有一个指向其它对象的实例对象时,可以称该对象拥有该实例变量所指向的对象。
    • 如果对象没有拥有者,就应该将其释放掉。没有拥有者的对象是孤立的,程序无法向其发送消息。保留这样的对象只会浪费宝贵的内存空间,导致内存泄露(memory leak)
    • 如果某个对象有一个或多个拥有者,就必须保留不能释放。如果释放了某个对象,但是其他对象或方法中仍然有指向该对象的指针(准确地说,是指向该对象被释放前的地址),那么向该指针指向的对象发送消息就会使应用崩溃。释放正在使用的对象的错误称为过早释放。指向不存在的对象的指针称为空指针(dangling pointer)或者空引用(dangling reference)。
  2. 哪些情况会使对象失去拥有者

    • 当程序修改某个指向特点对象的变量并将其指向另一个对象时。
    • 当程序将某个指向特点对象的变量设置为nil时。
    • 当程序释放对象的某个拥有者时。
    • 当从collection类中(例如数组)删除对象时。

最新文章

  1. Android RecyclerView.Adapter notifyDataSetChanged 不起作用
  2. css重置reset.css
  3. paip.信用卡账单处理分类bug o21
  4. jQuery高级技巧——性能优化篇
  5. 2016年11月23日 星期三 --出埃及记 Exodus 20:14
  6. linux命令每日一练习-pwd,cd
  7. PostgreSQL中,database,schema,table之间关系
  8. 移动Web开发技巧
  9. 正则表达式中/g的含义
  10. UITabBarController 笔记(三) UITabBarController 配合 UINavigationController 的使用
  11. LINQ to Entities does not recognize the method 'System.DateTime ToDateTime(System.String)' method
  12. easyui 动态渲染
  13. lua 函数
  14. 源码实现 --> strcmp
  15. HTML4到HTML5
  16. Eclipse+Maven+Scala Project+Spark | 编译并打包wordcount程序
  17. net 自定义泛型那点事
  18. 朽木第一至三季/全集Deadwood迅雷下载
  19. Ubuntu终端文件的压缩和解压缩命令
  20. Django(三):HttpRequest和HttpResponse

热门文章

  1. Large repunit factors (Project Euler 132)
  2. php 佛祖保佑 永无bug
  3. java微信开发API解析(四)-自己定义菜单以及个性化菜单实现
  4. python cPickle和pickle 序列化
  5. iOS学习笔记(七)——UI基础UIButton
  6. Just common sense.
  7. 删除datatable中的行
  8. python错误笔记
  9. C# 自定义控件摘记
  10. 常用算法及其Python实现