OC 点语法 和 成员变量作用域


1 点语法

    OC中点语法是对象成员set方法和get方法的一种简写形式. 使用更方便,更直观
//
//  Person.h
//  点语法
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    int _age;
}

- (void)setAge: (int)age;
- (int)age;
@end

//
//  Person.m
//  点语法
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import "Person.h"

@implementation Person

- (void)setAge:(int)age
{
    _age = age;
}

- (int)age
{
    return _age;
}
@end

//
//  main.m
//  点语法
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

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

int main(int argc, const char * argv[])
{
    Person *p = [Person new];
    p.age = 20; // 这段代码相当于 [p setAge:20];
    
    NSLog(@"p.age = %i", p.age); // p.age 相当于 [p age];
    return 0;
}


2 成员变量作用域

成员变量作用域修饰符的作用
@public     成员变量在任何地方都可以通过对象名或对象方法进行访问
@private   成员变量只能在当前类对象方法中访问, 子类的对象方法中无法访问
@protected  成员变量在当前类及子类对象方法中可以访问, 外部不能直接访问
//
//  Person.h
//  成员变量访问作用域
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    @public // 任何地方都可以对成员变量进行访问
    int _age; // 年龄
    
    @private // 只能在当前类的对象方法中使用
    NSString *_name; // 姓名
    
    @protected  // 只能在本类及子类对象方法中使用,不能被外部直接调用,
    double _weight; // 体重
    
    // 如果没有加任何作用域修饰符   默认作用域为 @protected
    double _heigh; // 身高
}

// _age的set和get方法
- (void)setAge: (int)age;
- (int)age;

// _name的set和get方法
- (void)setName: (NSString*)name;
- (NSString*)name;

// _weight的set和get方法
- (void)setWeight: (double)weight;
- (double)weight;

// _heigh的set和get方法
- (void)setHeigh: (double)heigh;
- (double)heigh;
@end

//
//  Person.m
//  成员变量访问作用域
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import "Person.h"

@implementation Person

- (void)setAge:(int)age
{
    _age = age;
}

- (int)age
{
    return _age;
}

- (void)setName:(NSString *)name
{
    _name = name;
}

- (NSString *)name
{
    return _name;
}

- (void)setWeight:(double)weight
{
    _weight = weight;
}

- (double)weight
{
    return _weight;
}

- (void)setHeigh:(double)heigh
{
    _heigh = heigh;
}

- (double)heigh
{
    return _heigh;
}
@end

//
//  Student.h
//  成员变量访问作用域
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import "Person.h"

@interface Student : Person

- (void)useName;
@end

//
//  Student.m
//  成员变量访问作用域
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import "Student.h"

@implementation Student
- (void)useName
{
    // _name = @"huahua"; _name 在父类中被声明为@private 所以不能在子类对象方法中使用
    NSLog(@"_name 在父类中被声明为@private 所以不能在子类对象方法中使用");
    NSLog(@"_weight = %f   _heigh = %f", _weight, _heigh); // _weight _heigh都是@protected作用域所以可以在子类方法中调用
}

@end

//
//  main.m
//  成员变量访问作用域
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"

int main(int argc, const char * argv[])
{
    Person *p = [Person new];
    
    p.age = 20; // 这段代码相当于 [p setAge:20];
    p->_age = 29; // _age成员变量可以在main中直接访问
    
    p.name = @"无名";
    p.weight = 55.3;
    p.heigh = 1.78;
    
    
    
    
    Student *s = [Student new];
    
    s.age = 22;
    s->_age = 21;  // 父类中成员变量作用域属性设置为@public, 在子类中同样也是@public
    
    s.name = @"小李"; // _name为@private 子类调用父类的setName方法,所以可以访问_name成员变量
    s.weight = 48.9;
    s.heigh = 1.81;
    
    [s useName];
    
    
    return 0;
}


父类方法,外部方法,子类方法, 可访问成员变量关系示意图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值