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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天空总是很蓝 中级黑马   /  2014-12-6 00:10  /  1164 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最后一行怎么是20呢

9 个回复

倒序浏览
看不见。。把代码发出来。。。。
回复 使用道具 举报
  1. #import <Foundation/Foundation.h>
  2. @interface Person : NSObject
  3. {
  4.     int _age;
  5. }
  6. - (void)test1;
  7. - (void)test2;
  8. + (void)test2;

  9. + (void)test3;
  10. + (void)test4;
  11. - (void)test4;
  12. @end

  13. @implementation Person
  14. - (void)test1
  15. {
  16.     _age = 20;
  17.    
  18.     int _age = 10;
  19.     NSLog(@"调用了-test1方法-%d", _age);
  20.     [self test2];
  21. }

  22. - (void)test2
  23. {
  24.     int _age = 10;
  25.     NSLog(@"调用了-test2方法-%d", self->_age);
  26. }

  27. + (void)test2
  28. {
  29.     int _age = 20;
  30.     NSLog(@"调用了+test2方法-%d", _age);
  31. }

  32. + (void)test3
  33. {
  34.     NSLog(@"调用了+test3方法");
  35.     [self test4];
  36. }

  37. + (void)test4
  38. {
  39.     NSLog(@"调用了+test4方法");
  40. }

  41. - (void)test4
  42. {
  43.     NSLog(@"调用了-test4方法");
  44. }
  45. @end

  46. int main()
  47. {
  48.     [Person test3];
  49.    
  50.     Person *p = [Person new];
  51.     [p test1];
  52.     return 0;
  53. }

  54. //运行后
  55. 2013-08-06 21:59:43.956 testOc[11962:303] 调用了+test3方法
  56. 2013-08-06 21:59:43.957 testOc[11962:303] 调用了+test4方法
  57. 2013-08-06 21:59:43.958 testOc[11962:303] 调用了-test1方法-10
  58. 2013-08-06 21:59:43.959 testOc[11962:303] 调用了-test2方法-20

复制代码
回复 使用道具 举报
。烊了 发表于 2014-12-6 00:17
看不见。。把代码发出来。。。。

恩好了  帮忙看看谢了
回复 使用道具 举报
因为打印时访问的是self->_age,访问的是当前方法调用的成员变量,而成员变量的值在对象方法test1中设置了为20
回复 使用道具 举报
int _age = 10;定义的只在这个函数内部有用,属于局部变量,而self->_age仿问的成员变量的_age
回复 使用道具 举报
天空总是很蓝 发表于 2014-12-6 00:53
恩好了  帮忙看看谢了

self->_age;访问的成员变量,而你的代码中 -(void) test方法中 定义了一个 int _age = 10; 但这并不会影响到self->_age;的值;  _age仅仅代表是在 -(void)test 函数中的一个局部变量,非成员变量,你输出的是成员变量,且 self->_age 在 -(void)test1 中已被赋值为20(_age前省略了self->),故而输出为20
回复 使用道具 举报
首先,把语句整理清楚,还有就是设置断点,看看哪出错了
回复 使用道具 举报
zwcshy 发表于 2014-12-6 09:38
int _age = 10;定义的只在这个函数内部有用,属于局部变量,而self->_age仿问的成员变量的_age ...

哈哈  明白了 多谢了
回复 使用道具 举报
。烊了 发表于 2014-12-6 10:10
self->_age;访问的成员变量,而你的代码中 -(void) test方法中 定义了一个 int _age = 10; 但这并不会影 ...

多谢啦 明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马