OC中的方法

本文介绍了Objective-C中实例变量的可见度级别:public、protected 和 private,并解释了为何通常选择 protected 而非 public 或 private。此外,还讨论了文件与类的关系以及在类方法中使用实例变量的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例变量的可见度:一共有三种    

@public:公共的,在任何文件中都可以访问.(访问方式是通过对象+指向操作符+实例变量,例如:per->name)    @protectde:受保护的,有一定的访问权限,只允许再本类文件以及子类文件中访问,其他文件不可以访问.    @private:私有的,只允许再本类文件中访问,不可以在子类文件 以及其他文件中访问.    

默认的可见度是@protected.    

为什么不声明为@public?    

1.声明为@public的实例变量,外部就可以访问以及修改,会影响内部的一个实现,暴露实现细节.    

2.违背了OC面向对象三大特性之一---封装.(封装的思想是隐藏内部实现,提供外部访问的接口)    

为什么不声明为@private?    

1.声明为@private的实例变量,子类文件访问不到,所以子类文件还需重新定义声明.    

2.违背了OC面向对象特性之一---继承.(父类有的东西,子类也有,可访问)


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


+ 号方法中不能使用实例变量 , 实例变量是以依托与对象存在的 , 只有有了对象 , 实例变量才会有空间 .


//在多个类中,类鱼类之间循环调用,会出现以下错误,这时,对于头文件的导入,要用,@class + 类名,

<span style="font-size:18px;">#import "Women.h"
#import "Child.h"
@class Women;
@class Child;

//创建男人类
@interface Man : NSObject
{
    @protected
    NSString *_name; //姓名
    NSString *_gender; //性别
    NSInteger _age; //年龄
    //Unkonwn type name "Women"
    //意思:不能识别的类型Women
    //产生原因:#import 头文件时,会将头文件的内容复制一份,而当使用Women这个类时,该类还未定义,所以识别不了.典型的循环导入问题.
    //解决方案:使用该类时不能把它当做一个类来使用,所以在.h文件中使用@class Women; 将Women声明为一个字符串,再使用,但是它不具备类中的内容,所以需要在.h文件中#import "Women.h" 导入头文件.
    Women *_wife; //妻子
    Child *_baby; //孩子
}</span>







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值