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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 wwwwjay 于 2015-5-27 10:35 编辑

int main(int argc, const char * argv[])
{
    hehe* student;
    @autoreleasepool
    {
        student = [hehe createHehe];
        [student retain];
        NSLog(@"retainCount %lu", [student retainCount]);
        
    }

    NSLog(@"retainCount %zi", [student retainCount]);
   
    return 0;
}



+ (id)  createHehe
{
       id  p = [[[hehe alloc] init ] autoRelease];
          return p;
}



这样输出结果为 2, 1
但是我将retain操作 注释了为什么是 1,1  而不是1,0?

4 个回复

倒序浏览
淫儿那?
回复 使用道具 举报
前来学习
回复 使用道具 举报
本帖最后由 yuang4074 于 2015-6-4 18:17 编辑

你注释后,出了池子后,该student对象在实际环境已经能够变成了僵尸对象,如果你开启僵尸模式,就会检测出来。显然你没开,这是程序没检测出来,就会认为student对象还可以使用。可以发送消息,此时指针还是指向的它。于是得出错误结论。建议规范写代码,避免出现不必要的bug。

点评

赞一个  发表于 2015-6-4 18:55
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马