A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Freedam 中级黑马   /  2014-6-7 11:04  /  1488 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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啊?难道是计数器在对象回收了之后又保存了一份?

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

3 个回复

倒序浏览
retainCount不是0,只能说明对象即使已经销毁了,这个值仍然可能大于0。(猜测)
回复 使用道具 举报
没开启僵尸对象管理吧 已经调用僵尸对象了 给一个已经销毁的对象发送retaincount消息 报野指针错误

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
从┧靇┟开始 发表于 2014-6-7 12:20
没开启僵尸对象管理吧 已经调用僵尸对象了 给一个已经销毁的对象发送retaincount消息 报野指针错误 ...

把这个忘了,的确是没开僵尸对象管理。开完了之后就好了。谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马