点语法本来是不需要介绍的,但是还是需要拿出来一点进行强调:点语法的本质是编译器对于setter或者getter方法的完全替换。具体代码如下:
Person.h
//
// Person.h
// OC_day3_点语法
//
// Created by 刘旭辉 on 2017/10/17.
// Copyright © 2017年 刘旭辉. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
// @public
int _age;
NSString *_name;
double _height;
}
-(void)setAge:(int)age;
-(void)setName:(NSString *)name;
-(void)setHeight:(double)height;
-(int)age;
-(NSString *)name;
-(double)height;
-(void)test;
@end
Person.m
//
// Person.m
// OC_day3_点语法
//
// Created by 刘旭辉 on 2017/10/17.
// Copyright © 2017年 刘旭辉. All rights reserved.
//
#import "Person.h"
@implementation Person
-(void)setAge:(int)age
{
_age=age;
}
-(void)setName:(NSString *)name
{
_name=name;
}
-(void)setHeight:(double)height
{
_height=height;
}
-(int)age
{
return _age;
}
-(NSString *)name
{
return _name;
}
-(double)height
{
return _height;
}
-(void)test
{
NSLog(@"test");
}
@end
mian.m
//
// main.m
// OC_day3_点语法
//
// Created by 刘旭辉 on 2017/10/17.
// Copyright © 2017年 刘旭辉. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
Person *p=[Person new];
// p->_age=25;
// p->_name=@"lxh";
// p->_height=1.70;
// NSLog(@"age=%i,name=%@,height=%f",p->_age,p->_name,p->_height);
// [p setHeight:1.70];
// [p setName:@"lxh"];
// [p setAge:25];
// NSLog(@"name=%@,age=%i,height=%f",[p name],[p age],[p height]);
//点语法,实际是调用了setter和getter方法,但是点语法不是一个编译器的特性,会在程序翻译成二进制的时候将语法自动转换为setter和getter方法
//如果点语法在等号的左边,系统会自动转换成setter方法
//如果点语法在等号的右边,或者没有等号,那么编译器就会自动转换为getter方法
//点语法的注意点:
//点语法一般用于给成员变量赋值,如果不是给成员变量赋值一般情况下不建议使用,但是也可以使用
p.name=@"lxh";
p.age=25;
p.height=1.70;
NSLog(@"name=%@,age=%i,height=%f",p.name,p.age,p.height);
//###注意此处调用
p.test;//这个方法被调用了,但是不是getter方法,因为点语法是一种格式替换,见到点语法,就替换成[p test]或者[p setTest:test];所以这种方式被触发了
return 0;
}
欢迎关注我的个人微信公众号,免费送计算机各种最新视频资源!你想象不到的精彩!