0%

OC中的访问控制

OC中提供了4个访问控制符:@private @package @protected @public。

@private(当前类访问权限):成员只能在当前类内部可以访问,在类实现部分定义的成员变量相当于默认使用了这种访问权限。

@package(同映像访问权限):成员可以在当前类或和当前类实现的同一映像中使用,同一映像就是编译后生成的同一框架或同一个执行文件,跨框架不可用。简单点讲就是使用package后,该成员变量在同一个框架里的所有类里都可以访问到,别的框架访问不到。

@protected(子类访问权限):成员可以在当前类和当前类的子类中访问。在类接口部分定义的成员变量默认是这种访问权限。

@public(公共访问权限):成员可以在任意地方访问。

private和public比较简单,所以这里具体说一下package和protected的使用场景。

使用package修饰的成员只能在当前框架内被访问。

比如A框架里有一个类XQSheet,它有一个_buttons成员。

1
2
3
4
5
6
@interface XQSheet : JHGrandPopupView
{
@package NSMutableArray *_buttons;
}

@end

使用package修饰后,那么_buttons只能在A框架内部被访问到(A框架的任意类里都可以),但不能在框架B里被访问。

如果改为protected:

1
2
3
4
5
6
@interface XQSheet : JHGrandPopupView
{
@protected NSMutableArray *_buttons;
}

@end

那么_buttons只能在当前类及其子类里被访问到。这个子类可以在A框架里,也可以在B框架里,说明可以跨框架,但必须是子类里。A框架里的Person类里能不能访问_buttons? 答案是不能。这就是和package的区别。

觉得文章有帮助可以打赏一下哦!