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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨勇 中级黑马   /  2014-4-27 13:08  /  1702 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨勇 于 2014-4-30 08:43 编辑

@interface Person : NSObject
{
    int _age;
}
- (void)setAge:(int)age;
- (int)age;
@ end

@implementation Person
- (void)setAge:(int)age
{
    self.age=age;//    1
}
- (int)age
{
   return self.age;//    2
}


请问1和2两处为什么会是死循环,不是简单的赋值和取值么?谢谢。
@end

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

5 个回复

倒序浏览
- (void)setAgeint:age
{
    self.age=age;//    因为self.age是调用的setAgeint:方法也就是自己调自己就死循环了
}
回复 使用道具 举报
gmadong@163.com 发表于 2014-4-27 13:20
- (void)setAgeint:age
{
    self.age=age;//    因为self.age是调用的setAgeint:方法也就是自己调自己 ...

他说得对!
回复 使用道具 举报
一楼说的对,我试了一下,给你分析得代码你参考一下。
  1. #import <Foundation/Foundation.h>
  2. @interface Penson : NSObject
  3. {
  4.     int _age;
  5. }
  6. - (void)setAge:(int)age;
  7. - (int)age;
  8. @end

  9. @implementation Penson
  10. - (void)setAge:(int)age
  11. {
  12.     NSLog (@"11");
  13.     self.age=age;//    1
  14.     NSLog(@"22");//执行会发现不会输出22,只会不断输出11,说明22这句代码永远不会执行,也就是说,在上句代码中他会调用当前方法,再输出11,到了第二句,再调用当前方法,再打印11。这就是死循环了
  15. }
  16. - (int)age
  17. {
  18.     return self.age;//    2
  19. }
  20. @end

  21. int main()
  22. {
  23.    
  24.    
  25.     Penson *p=[Penson new];
  26.     [p setAge:10 ];
  27.    
  28.      return 0;
  29. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
同学,MJ老师的视频里貌似讲过哦,关键字selfde 用法,嘻嘻
回复 使用道具 举报
楼主。你申请的成员变量是int _age。你的self.age其实是oc中的点语法。本质是调用了本类的setAge方法。。你在setAge中调用setAge。。。当然会死循环了。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马