当我们对于内存进行手动管理的时候,会出现两种错误:一种是野指针错误,一种则为内存泄露.这两点也是我们去管理内存时最终要解决的问题.

  内存泄漏是指:不在使用的对象,一直保留在内存中未被销毁,一直占有着内存,耗费内存资源直至程序结束.

  野指针则是指:当一个指针指向一个对象时,此对象已经被系统回收.然后当再次通过该指针去操作对象时,则会出现野指针错误.而当系统回收该对象时,并不会立即销毁,而此时,该对象则成为僵尸对象.

  在开发过程中,有人可能发现,有时僵尸对象也能访问.这是为什么呢?主要原因是因为XCode为了提高编码效率,并不会实时监测僵尸对象.所以也就意味着它依然留在内存,所以造成"对象被销毁后依然可以通过指针进行访问"的假象.

  那么,怎样解决这个问题呢?很简单,只需要在XCode中设置实时监测僵尸对象就可以了具体步骤如下:

  edit scheme --- Diagnostics --- 勾选Enable Zombie objects 即可.

  但这样会比较耗性能,导致编译时间延长.

  接下来,简单介绍下僵尸对象的销毁过程:

  假如一个对象person,其retainCount值为1,此时执行[person release],则会有如下过程

  1,判断retainCount - 1 == 0 (注意,此时对象依然存在,并未成为僵尸对象,而retainCount也未被真正减一)

  2,进入该类dealloc方法

  3,在dealloc方法中如果调用了[super dealloc],则此时对象retainCount == 0,该对象也成为僵尸对象.

  4,注意,如果没有调用[super dealloc]方法,那么该对象不会成为僵尸对象,其retainCount也不会减一.也就等于[person release]没有效果.

  僵尸对象细节:1,向其发送消息,会出现野指针错误

         2,如果在其类内部,可以通过成员变量名(地址)继续访问其成员属性,修改其值

最新文章

  1. Delete,Update与LEFT Join
  2. Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting
  3. DataItem,gridview,repeater数据控件数据绑定
  4. Cocoapods降低版本及卸载
  5. jquery面试需要看的基本东西
  6. 浅谈IT
  7. Web Service 之 开发、部署
  8. CodeForces - 269C Flawed Flow
  9. ArcGis(01)——地图切片以及发布底图服务
  10. Java中普通代码块,构造代码块,静态代码块的代码演示样例及区分
  11. Hibernate-ORM:05.Hibernate中的list()和iterator()
  12. Python—kmeans算法学习笔记
  13. android ----- 分享的连接在手机上打开App
  14. eikonal equation - 程函方程
  15. python创建数组的方法
  16. mac nginx+php-fpm配置(安装过后nginx后访问php文件下载,访问php文件请求200显示空白页面)
  17. header头参数不能带下划线
  18. SHA1加密算法 java
  19. NSMapTable、NSHashTable与NSPointerArray的封装
  20. MySQL学习之备份

热门文章

  1. 12.Android之Tabhost组件学习
  2. bzoj 3437 斜率优化DP
  3. Android系统中的广播(Broadcast)机制简要介绍和学习计划
  4. 循序渐进Linux 3:Linux下软件安装与管理
  5. 轻量级应用开发之(10) UINavigationController导航控制器
  6. java WebSocket Demo
  7. java中request,application,session三个域及参数简单示例
  8. Linux下使用popen()执行shell命令
  9. JS生成GUID算法
  10. Android(Java):jni源代码