是什么?
点语法还是方法的调用.点语法是Xcode编译器的一个功能!
有什么用?
提供一种更方便的方式去调用属性!
怎么用?
对象名.属性名(get方法)
对象名.属性名 = 数据;(set方法)
用的时候注意什么?
1,使用点语法的前提,成员变量的get方法,去掉get,直接属性名,但是set方法保持不变!
2,点语法的本质还是方法的调用!
3,点语法不能在set方法里面调用set方法,get方法里面调用get方法!(否则出现死循环)
set方法里面可以调用get方法,前提是get方法里面没有调用set方法!
get方法里面可以调用set方法,前提是set方法里面没有调用get方法!
4,点语法可以调用普通方法,只要符合规则!(一般不这么用)
规则就是,有声明 -(void)add; 有实现-(void)add{}
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject{
NSString *_name;
int _age;
double _high;
}
-(void) setName:(NSString *)name;
//原有get方法:getName,点语法的get方法:name.
-(NSString *)name;
-(void) setAge:(int)age;
-(int)age;
-(void) setHigh:(double)high;
-(double)high;
-(void)setWeight:(double)weight;
-(double)weight;
-(void)add;
@end
Person.m
#import "Person.h"
@implementation Person
#pragma mark name的set和get方法
-(void) setName:(NSString *)name{
_name = name;
//可以在set方法里面调用自己的get方法!(前提是get方法里面没有调用set方法,否则死循环)
//不可以在set方法里面调用,自己的set方法,会死循环!
//NSLog(@"名称:%@",self.name);
}
-(NSString *)name{
//可以在get方法里面调用自己的set方法!(前提是set方法里面没有get方法,否则死循环)
//不能在get方法里面调用,自己的get方法!否则进入死循环
self.name =@"haha"; //[self setName:@"haha"];
//self.name;
return _name;
}
#pragma mark - age的set和get方法
-(void) setAge:(int)age{
_age = age;
}
-(int)age{
return _age;
}
#pragma mark - high的set和get方法
-(void) setHigh:(double)high{
_high = high;
}
-(double)high{
return _high;
}
//点语法的get方法不用get成员变量名.而是直接用成员变量名.
#pragma mark - weight
-(void)setWeight:(double)weight{
NSLog(@"weight");
}
-(double)weight{
return 11.0;
}
#pragma mark - add
-(void)add{
NSLog(@"add...");
}
main.n
/*
29点语法的使用
1.直接用对象的指针名.(去掉get或set的)方法名.
2.前题:成员变量的get方法,不再需要get,但set方法保持不变.
本质:
点语法本质还是方法调用.去调用的类中定义的set get方法(get方法不需要前面加get);
点语法Xcode编译器的一个功能.本质上还是去调用方法.
提供一种更方便的方式去操作属性.
两个要注意的问题:
1.不能在set或get方法里用点语法调用自已.否则会出现死循环.
说明:1)在set方法里面调用set方法不可以(self.name =@"huh"),会出现死循环!
2)在set方法里面可以调用get方法,前提是get方法里面,没有调用set方法,否则死循环!
2.点语法可以调用普通方法,只要符合规则.但是不要这么做.
规则是什么?
有声明 -(void)add;
有实现 -(void)add{}
*/
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
Person *per = [Person new];
[per setName:@"huh2"];
[per setAge:32];
[per setHigh:1.72];
NSLog(@"姓名:%@,年龄:%d,身高:%.3f",[per name],[per age],[per high]);
//点语法
per.name = @"huh";
per.age = 23;
per.high = 1.70;
NSLog(@"姓名:%@,年龄:%d,身高:%.3f",per.name,per.age,per.high);
per.add;
return 0;
} |
|