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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程序猿-2014 中级黑马   /  2014-4-10 19:08  /  992 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 程序猿-2014 于 2014-4-11 14:35 编辑

#import <Foundation/Foundation.h>
@interface Person : NSObject
{
    int _age;
}
- (void)setAge: (int)age;
- (int)age;
@end

@implementation Person
{
    int _age;
}
- (void)setAge: (int)age
{
    self.age = age
}
- (int)age
{
    return _age;
}
@end
如题:题中的下划线中得self.age内存中得表现形式是什么啊   

评分

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

查看全部评分

4 个回复

倒序浏览
self.age = age; // 相当于[self setAge:age];
按你这样的写法会造成无限循环。
点语法基本法则:在等号左边是set方法,在等号右边是get方法。

评分

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

查看全部评分

回复 使用道具 举报
这样写的话,会引起死循环

猎豹截图20140410192941.png (127.83 KB, 下载次数: 15)

猎豹截图20140410192941.png
回复 使用道具 举报
self.age = age;指的是将传进来的参数赋值给调用该函数所对应的对象的成员变量age,
在内存中的表现形式是,先是在堆内存中创建一个该类对象,然后该类对象调用自身的set函数
,并且同时传入形参的具体数值,set函数中执行self.age = age;是将传进来的参数赋值给自身的
成员变量,这个是点方法的运用,其实也可以写成  _age = age;意思是相同的!

评分

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

查看全部评分

回复 使用道具 举报
  1. #import "Person.h"

  2. @implementation Person

  3. - (void)setAge: (int)age
  4. {
  5.     /** 点语法是编译器特性,只是编译器会自动把self.age = age 转成
  6.      [self setAge:age];
  7.      所以这样会引发死循环。
  8.      */
  9.     self.age = age;
  10. }
  11. - (int)age
  12. {
  13.     /**
  14.      同理,如果在这里使用点语法 return self.age;也会引发死循环
  15.      编译器会把self.age 转成[self age];
  16.      */
  17.     return _age;
  18. }
  19. @end
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马