黑马程序员技术交流社区

标题: 关于release操作的问题 [打印本页]

作者: Freedam    时间: 2014-6-7 11:04
标题: 关于release操作的问题
本帖最后由 Freedam 于 2014-6-8 10:47 编辑

直接上代码:
Car.h
  1. #import <Foundation/Foundation.h>

  2. @interface Car : NSObject

  3. @end
复制代码


Car.m
  1. #import "Car.h"

  2. @implementation Car

  3. @end
复制代码


main.m
  1. #import <Foundation/Foundation.h>
  2. #import "Car.h"

  3. int main(int argc, const char * argv[])
  4. {
  5.     Car *c = [[Car alloc] init];
  6.     NSLog(@"Car is %ld",[c retainCount]);
  7.    
  8.     [c release];
  9.      //[c release];
  10.     NSLog(@"Car is %ld",[c retainCount]);
  11.     return 0;
  12. }
复制代码

运行结果:
  1. 2014-06-07 10:58:18.068 dui[745:303] Car is 1
  2. 2014-06-07 10:58:18.071 dui[745:303] Car is 1
  3. Program ended with exit code: 0
复制代码

我想问Car类型的对象已经release了,为什么retainCount还能返回1啊?难道是计数器在对象回收了之后又保存了一份?
作者: 大龄产妇    时间: 2014-6-7 11:21
retainCount不是0,只能说明对象即使已经销毁了,这个值仍然可能大于0。(猜测)
作者: 从┧靇┟开始    时间: 2014-6-7 12:20
没开启僵尸对象管理吧 已经调用僵尸对象了 给一个已经销毁的对象发送retaincount消息 报野指针错误
作者: Freedam    时间: 2014-6-8 10:46
从┧靇┟开始 发表于 2014-6-7 12:20
没开启僵尸对象管理吧 已经调用僵尸对象了 给一个已经销毁的对象发送retaincount消息 报野指针错误 ...

把这个忘了,的确是没开僵尸对象管理。开完了之后就好了。谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2