黑马程序员技术交流社区

标题: 求大牛,帮解释下多谢啦 [打印本页]

作者: 天空总是很蓝    时间: 2014-12-6 00:10
标题: 求大牛,帮解释下多谢啦
最后一行怎么是20呢

作者: 。烊了    时间: 2014-12-6 00:17
看不见。。把代码发出来。。。。
作者: 天空总是很蓝    时间: 2014-12-6 00:49
  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:53
。烊了 发表于 2014-12-6 00:17
看不见。。把代码发出来。。。。

恩好了  帮忙看看谢了
作者: lnyg1992    时间: 2014-12-6 08:41
因为打印时访问的是self->_age,访问的是当前方法调用的成员变量,而成员变量的值在对象方法test1中设置了为20
作者: zwcshy    时间: 2014-12-6 09:38
int _age = 10;定义的只在这个函数内部有用,属于局部变量,而self->_age仿问的成员变量的_age
作者: 。烊了    时间: 2014-12-6 10:10
天空总是很蓝 发表于 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
作者: 嗷嗷嗷    时间: 2014-12-6 18:03
首先,把语句整理清楚,还有就是设置断点,看看哪出错了
作者: 天空总是很蓝    时间: 2014-12-9 00:01
zwcshy 发表于 2014-12-6 09:38
int _age = 10;定义的只在这个函数内部有用,属于局部变量,而self->_age仿问的成员变量的_age ...

哈哈  明白了 多谢了
作者: 天空总是很蓝    时间: 2014-12-9 00:03
。烊了 发表于 2014-12-6 10:10
self->_age;访问的成员变量,而你的代码中 -(void) test方法中 定义了一个 int _age = 10; 但这并不会影 ...

多谢啦 明白了




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