OC开发实例变量的访问控制详解

本文介绍了Objective-C中实例变量的访问控制方式,包括不同编译器指令如何设定实例变量的作用范围,以及在不同文件中声明实例变量和属性时访问控制的区别。

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

设置访问实例变量的方式

在对象内部,对象的任何实例方法都可以访问该对象的实例变量。 通过外部类实例直接访问对象的实例变量属于变量功能范畴。

OC拥有多条编译器指令,专门用于设置实例变量的作用范围(即访问控制)。

在.h中声明的实例变量

默认的作用范围是@protect。在本类及子类中可以通过->调用或者直接使用实例变量名调用。在其他类生成本类的实例对象无法使用该实例变量。 若声明作用范围: @private 只能在本类中调用,子类无法调用。 @protect:略 @public:子类,本类,其他类中生存该类实例后均能调用 @package:同@public

若在.m文件和扩展文件中声明实例变量,无论声明的作用范围是@public还是@package,统统变为@private的作用范围

在.h中声明的属性

setter和getter访问等同于实例变量@public作用范围 但其实属性被编译器自动补全时,它会创建一个作用范围为@private的实例变量,无法在子类中直接用实例变量名访问。而要用setter和getter方法。若想在子类中直接使用父类的属性的实例变量名,必须重构父类接口。在.h文件中添加@protect声明的实例变量名即可,记得在属性名前加下划线。

在.m的类扩展中声明的属性

setter和getter访问等同于实例变量@private作用范围

如果希望声明在类扩展中的属性能在类外被访问,常用的手段是在.h中将属性声明为(readonly),然后在.m文件中重新声明为(readwrite)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值