黑马程序员_OC点语法

----------------------ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

在Java中,我们可以通过"对象名.成员变量名"来访问对象的公共成员变量,这个就称为"点语法"。很多高级语言中都有这种点语法,为了让其他行业的程序员快速上手OC,OC中也引入了点语法,只不过它的含义跟Java不太一样。

在正式学习OC的点语法之前,先来看一下传统的set方法和get方法。定义一个Car类,拥有一个成员变量_speed和对应的set方法和get方法

1.Person.h

#import <Foundation/Foundation.h>

@interface Car : NSObject {
    int _speed;
}

- (void)setSpeed:(int)speed;
- (int)speed;

@end
在第4行定义了一个成员变量age,默认是@protected权限的,所以外界不能直接访问它。
在第7、8行分别声明了age变量的set方法和get方法。

2.Person.m

#import "Car.h"

@implementation Car
//set方法实现
- (void)setSpeed:(int)speed {
    _speed = speed;
}
//get方法实现
- (int)speed {
    return _speed;
}

@end

一、通过传统的set和get方法来设置和取出成员变量的值

#import <Foundation/Foundation.h>
#import "Car.h"

int main()
{
    Car *c = [[Car alloc] init];
        
    // 通过set方法设置_speed的值
    [c setSpeed:10];
        
    // 通过get方法取出_speed的值
    int speed = [c speed];
        
    NSLog(@"speed is %i", speed);
        
    [c release];
    
    return 0;
}
传统的set和get方法是通过 方法的调用[c setSpeed:10]和[c speed]来分别设置和取出_speed的值。

二、使用点语法代替传统的get方法和set方法来设置和取出成员变量的值

#import <Foundation/Foundation.h>
#import "Car.h"

int main()
{
    Car *c = [[Car alloc] init];
        
    // 通过set方法设置_speed的值
    c.speed = 10;//等价于[c setSpeed:10];
        
    // 通过get方法取出_speed的值
    int speed = c.speed;//等价于int speed = [c speed];
        
    NSLog(@"speed is %i", speed);
        
    [c release];
    
    return 0;
}
点语法是编译器特性,第9行 的c.speed并 不是 代表直接访问s对象的成员变量_speed,而是编译器遇到c.speed = 10的时候会自动将代码展开成[c setSpeed:10];其实还是调用的set方法,第12行的c.speed不是直接访问c对象的成员变量_speed,而是编译器遇到int speed = c.speed; 的时候会自动将代码展开成int speed = [c speed];其实还是调用的get方法。

因此,OC中点语法的含义跟Java是完全不一样的,OC点语法的本质是方法调用,不是直接访问成员变量。至于这个点语法代表的是get方法还是set方法,那就取决于你是取值还是设值,取值就是get方法(如第12行代码),设值就是set方法(如第9行代码)。

三、点语法注意:

- (void)setSpeed:(int)speed
{
    self.speed = speed;
}
OC点语法本质是方法调用,所以第3行还是调用set方法,set方法里面调用set方法,故会引发死循环。

----------------------ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值