黑马程序员技术交流社区
标题: 点语法的问题 [打印本页]
作者: 程序猿-2014 时间: 2014-4-10 19:08
标题: 点语法的问题
本帖最后由 程序猿-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内存中得表现形式是什么啊
作者: 周宇华 时间: 2014-4-10 19:19
self.age = age; // 相当于[self setAge:age];
按你这样的写法会造成无限循环。
点语法基本法则:在等号左边是set方法,在等号右边是get方法。
作者: 1722413885 时间: 2014-4-10 19:31
这样写的话,会引起死循环
-
猎豹截图20140410192941.png
(127.83 KB, 下载次数: 23)
作者: 啊康 时间: 2014-4-10 19:37
self.age = age;指的是将传进来的参数赋值给调用该函数所对应的对象的成员变量age,
在内存中的表现形式是,先是在堆内存中创建一个该类对象,然后该类对象调用自身的set函数
,并且同时传入形参的具体数值,set函数中执行self.age = age;是将传进来的参数赋值给自身的
成员变量,这个是点方法的运用,其实也可以写成 _age = age;意思是相同的!
作者: 于清扬 时间: 2014-4-11 14:18
- #import "Person.h"
- @implementation Person
- - (void)setAge: (int)age
- {
- /** 点语法是编译器特性,只是编译器会自动把self.age = age 转成
- [self setAge:age];
- 所以这样会引发死循环。
- */
- self.age = age;
- }
- - (int)age
- {
- /**
- 同理,如果在这里使用点语法 return self.age;也会引发死循环
- 编译器会把self.age 转成[self age];
- */
- return _age;
- }
- @end
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |