黑马程序员技术交流社区
标题:
关于手动释放对象的问题,求解答
[打印本页]
作者:
chain
时间:
2014-6-23 22:48
标题:
关于手动释放对象的问题,求解答
本帖最后由 chain 于 2014-6-23 22:56 编辑
#import <Foundation/Foundation.h>
#import "Pesrson.h"
Person *test()
{
Person *p = [Person alloc] init];
return p;
}
int main(int argc, const char * argv[])
{
Person *p1 = test();
NSLog(@"%ld",p1.retainCount);
[p1 release];
NSLog(@"%ld",p1.retainCount);
return 0;
}
复制代码
上述代码,我重写了dealloc方法,按道理来说,当调用test函数的时候,指针P指向了这个对象,计数器加1,并且p1也指向了这个对象,这样的话,计数器应该为2,然后P1 调用release方法,这时p还是指向这个对象啊,对象不应该被销毁啊,可是我运行程序却调用了dealloc方法,怎么回事呢?而且,如果对象调用了dealloc方法,就表示被销毁了,那么P1为什么还能调用retainCount这个方法呢?为什么不是野指针错误?求解答一下,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2