02 实例变量可见度、方法

本文深入探讨了面向对象编程中实例变量的可见度概念,包括内部、保护和私有属性的区别,并详细说明了如何在类中进行实例变量的赋值和获取。同时介绍了方法的概念,包括类方法和实例方法的区别,以及如何定义和使用赋值和获取方法。此外,文章还阐述了自定义初始化和setter/getter方法的作用,并提供了实例代码演示。

一 实例变量可见度


所谓的内部,指的是相应类@implementation…@end之间


@interface Person : NSObject

{

    //声明实例变量

@public;

    NSString *_addstress;

    NSString *_hobby;

@protected; //只有自己和子类可以访问 , 什么都不写的话,默认protected

    NSString *_name;

    int _age;

@private;

    NSString *_gender; //性别

}

  这里不使用@public,为什么呢?
1) 使用@public关键字,暴露了类内部的细节
2)不符合面向对象语言的三大特性之一 ------封装

  如何在其他文件中访问对象@protected修饰的实例变量?
提示: 添加两个方法
赋值:通过方法传入参数,在类的内部实现实例变量赋值
取值:通过方法获取实例变量的值
    由此引入方法

二 方法

1)简介

OC中的方法有两种:类方法和实例方法

类方法:只能类使用,例如: +(id)alloc

注意:类方法中不能使用实例变量

实例方法:只能对象使用,例如: -(void)sayHi;

2)方法的声明


方法名(replaceObjectAtIndex)需注意的地方

     1)类中不能出现同名方法

      2)' : '标识参数,不能省略. 有冒号必须有参数.


3)方法中的赋值 , 取值方法

//声明给name 赋值的方法

- (void)setName:(NSString *)newname;

//声明获取name值的方法

- (NSString *)getName;

4)多参数方法

//多参数的方法

- (void)setName:(NSString *)name

            age:(int)age

         gender:(NSString *)gender;

5)方法的使用
        1)在OC中使用消息发送机制: [receiver message]
  2)正确表述: 给student对象发送sayHi消息
1) student接收到消息
2) student找到sayHi方法,并执行

三 setter  getter
 1)简介
在OC里,为实例变量赋值的方法称作setter (设置器)
读取实例变量值的方法称作getter (访问器)
我们之前写的那些赋值取值的方法都可以称作setter 和 getter
setter的书写格式:set+首字母大写的实例变量名
getter的书写格式:方法名与实例变量名相同
 2)setter getter
无论setter 还是getter内部操作的是实例变量
每一个实例变量都需要一对setter getter方法
3)自定义初始化
  1)简介
- (id)init这个初始化只能给实例变量设置默认值,不灵活
- (id)initWithName:自定义初始化方法,根据需求定义初始化方法
  2)示例

//声明自定义初始化方法 ◀️

//instancetype 代表任意类型

- (instancetype)initWith:(NSString *)name

                   score:(CGFloat)score;

//实现自定义初始化方法

- (instancetype)initWithName:(NSString *)name

                       score:(CGFloat)score

                   className:(NSString *)className

                      height:(CGFloat)height

{

    //1. 先去使用去父类继承过来的方法

    self = [super initWith: name score:score]; //super 表示父类继承过来的方法 , self 表示自己的方法

    //2.判断初始化是否成功,成功后在初始化自己的实例变量

    if (self) { //判断是否存在 if(self !=nil)

        _className = className;

        _height = height;

    }

    //3.返回

    return self;

}


四 #import  和 @class 
 1)#import
 导入头文件,即:导入头文件中的内容到当前类;
 #import " "导入自定义类, #important< >导入类库中的头文件;
 功能类似C语言中的#include,但是可以避免头文件被重复导入;
 容易出现循环导入文件问题;
 2)@class


告诉编译器@class后的字符串作为类名使用,并未导入类的接口内容
有效避免嵌套循环导入


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值