/*
1> 点语法:
作用:快速调用属性的setter/getter方法.
语法:对象名.去掉下划线的属性名
赋值则自动调用当前属性的setter方法:对象名.去掉下划线的属性名 = 数据;
取值则自动调用当前属性的getter方法:对象名.去掉下划线的属性名.
2> 点语法的本质
点语法在本质上还是调用setter/getter方法.
如下代码:
//赋值属性:使用点语法赋值
xiaoming.name = @"小明";
xiaoming.age = 18;
编译器在变异的时候,并不是直接赋值,而是将点语法的代码替换为setter/getter方法.
即:
[xiaoming setName:@"小明"];
[xiaoming setAge:18];
//使用点语法取值
NSLog(@"大家好!我叫%@,今年%d岁了!", xiaoming.name, xiaoming.age);
编译器在变异的时候,并不是直接赋值,而是将点语法的代码替换为setter/getter方法.
即:
[xaioming name];
[xiaoming age];
3> 使用点语法的前提:
因为点语法在本质上还是调用了setter/getter方法,
所以使用点语法为属性赋值或取值的的前提是:为属性封装了对应的setter/getter方法,
而且必须符合规范.因为编译器在编译的时候是按照规范来转换的,
如果没有为属性封装setter/getter方法,使用点语法就会报错.
*/
#import <Foundation/Foundation.h>
#pragma mark -
#pragma mark 人类的声明
@interface YYPerson : NSObject
{
NSString *_name;
int _age;
}
- (void)setName:(NSString *)name;
- (NSString *)name;
- (void)setAge:(int)age;
- (int)age;
- (void)sayHi;
@end
#pragma mark -
#pragma mark 人类的实现
@implementation YYPerson
- (void)setName:(NSString *)name
{
_name = name;
}
- (NSString *)name
{
return _name;
}
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
- (void)sayHi
{
NSLog(@"大家好!我叫%@,今年%d岁了!", _name, _age);
}
@end
#pragma mark -
#pragma mark main函数
int main(int argc, const char * argv[]) {
//创建人类对象
YYPerson *xiaoming = [YYPerson new];
//赋值属性:使用点语法赋值
xiaoming.name = @"小明";
xiaoming.age = 18;
/*
编译器在变异的时候,并不是直接赋值,而是将点语法的代码替换为setter/getter方法.
即:
[xiaoming setName:@"小明"];
[xiaoming setAge:18];
*/
//调用方法
[xiaoming sayHi];
//使用点语法取值
NSLog(@"大家好!我叫%@,今年%d岁了!", xiaoming.name, xiaoming.age);
/*
编译器在变异的时候,并不是直接赋值,而是将点语法的代码替换为setter/getter方法.
即:
[xaioming name];
[xiaoming age];
*/
return 0;
}