黑马程序员技术交流社区

标题: 关于 Release 的奇怪问题, 求小神门解答 [打印本页]

作者: wwwwjay    时间: 2015-5-27 08:55
标题: 关于 Release 的奇怪问题, 求小神门解答
本帖最后由 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?


作者: wwwwjay    时间: 2015-5-27 13:43
淫儿那?
作者: 天是蓝色的    时间: 2015-5-27 22:06
前来学习
作者: yuang4074    时间: 2015-6-4 18:14
本帖最后由 yuang4074 于 2015-6-4 18:17 编辑

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




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