黑马程序员----Objective-C学习笔记之点语法的介绍和使用

------Java培训、Android培训、iOS培训、.Net培训--------

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"替换成[p2setName:@"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]----------使用传统setget----------

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方法,就会报错了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值