OC实例变量可见度 setter方法和getter方法

实例变量的可见度:一共有三种
    @pubic:公共的, 在任何文件中都可以访问(访问方式是通过对象+指向操作符, 例如:per->name
    @protected:受保护的, 有一定的访问权限, 只允许在本类文件以及子类中访问, 其他文件不可以访问
    @private:私有的, 只允许在本类文件中访问, 不可以在子类文件以及其他文件中访问
    默认的可见度是@protected
    为什么不声明为@public?
    1 声明为@pubic的实例变量, 外部就可以访问以及修改, 会影响内部的一个实现, 暴漏实现细节
    2 违背了OC面向对象的三大特性之一-----封装.(封装的思想是隐藏内部的实现, 提供外部访问的接口)
    为什么不声明为@private
    1 声明为@private的实例变量, 子类文件不能访问, 所以子类文件还要重新定义声明
    2 违背了OC面向对象特性之一----继承(父类有的东西, 子类也有, 可访问)

文件和类没有直关系: 文件中可以存放多个类, 只要类符合接口部分和实现部分的定义格式就可以; 一般情况下, 一个文件中就定义一个类, 而且文件的名字和类的名字一样, 这样就能清晰的知道该文件中类的名字

self : 谁调用该方法, self代表谁
        当方法是实例方法(-号方法)时, 调用该方法的对象是谁, self就代表当前对象
        当方法是类方法(+号方法)时, 调用该方法的类是谁, self就代表当前类

@interface Person : NSObject {
    NSString *_name;//姓名
    NSInteger _age;//年龄
    NSString *_sex;//性别 gender
}

- (void)sayHi;

//设置器 seter方法 (只有一个参数的)-------有多个参数的方法不叫设置器--------------
//为name赋值
- (void)setName:(NSString *)name;
- (void)setAge:(NSInteger)age;
- (void)setSex:(NSString *)sex;

//访问器 getter方法
- (NSString *)name;
- (NSInteger)age;
- (NSString *)sex;

+ (void)test;

//自定义初始化方法
- (id)initWithName:(NSString *)name age:(NSInteger)age sex:(NSString *)sex;
@end

@implementation Person
- (void)sayHi {
    NSLog(@"hello iOS, my name is %@, age is %ld, sex is %@", _name, _age, _sex);
}

//设置器(只有一个参数的)
//设置名字
- (void)setName:(NSString *)name {
    _name = name;
}
//设置年龄
- (void)setAge:(NSInteger)age {
    _age = age;
}
//设置性别
- (void)setSex:(NSString *)sex {
    _sex = sex;
}

//访问器
//访问姓名, 将姓名返回
- (NSString *)name {
    return _name;//直接将值返回即可
}
//访问年龄, 将年龄返回
- (NSInteger)age {
    return _age;
}
//访问性别, 将性别返回
- (NSString *)sex {
    return _sex;
}

+ (void)test {
    //在类方法(+号方法)中不能使用实例变量, 实例变量是依托对象存在的, 只有有了对象, 实例变量才会有空间
//    _name;
}

- (id)initWithName:(NSString *)name age:(NSInteger)age sex:(NSString *)sex {
    self = [super init];
    if (self != nil) {
        _name = name;
        _age = age;
        _sex = sex;
    }
    /**
     *  self : 谁调用该方法, self代表谁
        当方法是实例方法(-号方法)时, 调用该方法的对象是谁, self就代表当前对象
        当方法是类方法(+号方法)时, 调用该方法的类是谁, self就代表当前类
     */
    return self;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值