OC-访问控制与安全
实例变量的作用域 (访问控制)
- OC中提供了4个指令,用于控制访问对象的实例变量
- @private
- @protected(默认)
- @public
- @package
- 只能用于64位运行库, 即同一个库或框架中的代码可以访问
在32位运行库中等同于@public
- 在类的接口部分,指令出现在他们描述的实例变量之前,当给出一个指令时,它的有效区间直到另一个指令出现为止
- 从Xcode4.2开始,我们可以在类的扩展中声明实例变量和属性
- 即可以在类的扩展中声明实例变量
- 但是,现在一般都直接写在@implementation中,就可以实现隐藏,例如:
- 实际上,现在,在类扩展或者在@implementation部分声明的实例变量都是@private的,其他编译器指令不会起作用
- 但是在扩展与在@implementation部分声明的区别是
- 在扩展部分声明的实例变量子类是可以访问到的
- 但是在@implementation部分声明实例变量子类是绝对看不见的
#import "Person.h"
@implementation Person
{
int privateVariable;
}
-(void) someMethod;
@end
- 在OC中没有命名空间的概念
- 不同的框架一般都是通过类的首字母来区别,例如NSString
安全问题
- 隐藏实例变量或者限制访问他们在类别的面前都没有用
- 我们还是可以使用类别来访问类隐藏的变量或者方法