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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chain 中级黑马   /  2014-6-23 22:48  /  879 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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这个方法呢?为什么不是野指针错误?求解答一下,谢谢

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马