1、使用 - #import <Foundation/Foundation.h>
-
- @interface Person : NSObject{
- NSString *_name;
- int _age;
- }
- //set方法
- -(void)setName:(NSString*)name;
- -(void)setAge:(int)age;
- //get方法
- -(NSString*)name;
- -(int)age;
-
- @end
-
- @implementation Person
-
- -(void)setAge:(int)age{
- _age = age;
- NSLog(@"调用了setAge方法");
- }
- -(void)setName:(NSString *)name{
- _name = name;
- NSLog(@"调用了setName方法");
- }
-
- -(int)age{
- NSLog(@"调用了getAge方法");
- return _age;
- }
-
- -(NSString *)name{
- NSLog(@"调用了getName方法");
- return _name;
- }
- @end
- int main(int argc, const char * argv[])
- {
-
- @autoreleasepool {
-
- //使用传统set和get
- NSLog(@"----------使用传统set和get----------");
- Person *p = [Person new];
- [p setName:@"Amos"];
- [p setAge:23];
-
- NSString * name = [p name];
- int age = [p age];
-
- NSLog(@"name = %@, age = %d",name, age);
-
- NSLog(@"----------使用点语法-----------");
-
- //使用点语法
- Person *p2 = [Person new];
- //此处不是直接访问实例变量,而是Xcode遇到点语法出现在等号左侧,会自动把p2.name=@"Allen"替换成[p2 setName:@"Allen"];
- p2.name = @"Allen";
- p.age = 22;
- //此处Xcode遇到点语法出现在等号右侧,会地总把p2.name替换成[p2 name]
- NSLog(@"name = %@, age = %d",p2.name, p2.age);
-
- //总结,Xcode把p2.name替换成set还是get取决于该点语法出现在等号的左侧还是右侧
- }
- return 0;
- }
复制代码
打印结果:
2015-10-05 08:20:56.757 Day20[565:303]----------使用传统set和get---------- 2015-10-05 08:20:56.759 Day20[565:303] 调用了setName方法 2015-10-05 08:20:56.760 Day20[565:303] 调用了setAge方法 2015-10-05 08:20:56.760 Day20[565:303] 调用了getName方法 2015-10-05 08:20:56.761 Day20[565:303] 调用了getAge方法 2015-10-05 08:20:56.761 Day20[565:303] name = Amos, age = 23 2015-10-05 08:20:56.762 Day20[565:303]----------使用点语法----------- 2015-10-05 08:20:56.762 Day20[565:303] 调用了setName方法 2015-10-05 08:20:56.763 Day20[565:303] 调用了setAge方法 2015-10-05 08:20:56.763 Day20[565:303] 调用了getName方法 2015-10-05 08:20:56.763 Day20[565:303] 调用了getAge方法 2015-10-05 08:20:56.764 Day20[565:303] name = Allen, age = 0
2、注意事项 1)set死循环 - -(void)setAge:(int)age{
- self.age = age;
- }
复制代码
这样会自身调用自身,陷入死循环,相当于 - -(void)setAge:(int)age{
- [self setAge:age];
- }
复制代码
2)get死循环 - -(int)age{
- return self.age;
- }
复制代码
这样也是死循环相当于 - -(int)age{
- return [self age];
- }
复制代码
3、点语法的本质 是方法的调用,而不是直接访问实例变量,如果没有声明定义对应的set和get方法,就会报错了
|