设置访问实例变量的方式
在对象内部,对象的任何实例方法都可以访问该对象的实例变量。
通过外部类实例直接访问对象的实例变量属于变量功能范畴。
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)。