黑马程序员技术交流社区

标题: 关于手动释放对象的问题,求解答 [打印本页]

作者: chain    时间: 2014-6-23 22:48
标题: 关于手动释放对象的问题,求解答
本帖最后由 chain 于 2014-6-23 22:56 编辑
  1. #import <Foundation/Foundation.h>
  2. #import "Pesrson.h"

  3. Person *test()
  4. {
  5.     Person *p = [Person alloc] init];
  6.    
  7.     return p;
  8. }

  9. int main(int argc, const char * argv[])
  10. {
  11.     Person *p1 = test();
  12.     NSLog(@"%ld",p1.retainCount);
  13.    
  14.    
  15.     [p1 release];
  16.     NSLog(@"%ld",p1.retainCount);
  17.    
  18.     return 0;
  19. }
复制代码
上述代码,我重写了dealloc方法,按道理来说,当调用test函数的时候,指针P指向了这个对象,计数器加1,并且p1也指向了这个对象,这样的话,计数器应该为2,然后P1 调用release方法,这时p还是指向这个对象啊,对象不应该被销毁啊,可是我运行程序却调用了dealloc方法,怎么回事呢?而且,如果对象调用了dealloc方法,就表示被销毁了,那么P1为什么还能调用retainCount这个方法呢?为什么不是野指针错误?求解答一下,谢谢





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