有没有办法定义某些类可以访问的变量而不是其他类?

时间:2013-04-01 11:29:04

标签: iphone ios objective-c ipad variables

在objective-c中,对变量的访问仅限于三种类型:@public@private@protected(默认)和@package ..这些访问修饰符允许我们按顺序通过4种情况访问变量:

1-从任何地方访问变量。

2-只在类中访问变量。

3-从类及其子类中的任何位置访问变量。

4-从框架中的任何位置访问变量。

我的问题是:有没有办法定义某些类可以访问的变量而不是其他类? (即变量的自定义范围)

3 个答案:

答案 0 :(得分:2)

您要求的是C ++的friend关键字。 Friend classes in Objective-C讨论了该主题。

答案 1 :(得分:1)

您可以使用类扩展来创建更灵活的访问控制:

// MyClass.h
@interface MyClass : SomeSuperclass {
    int ivar;
}
@end

// MyClass-Custom.h
#include "MyClass.h"
@interface MyClass () {
    int anotherIvar;
}
@end

现在,只有#includes MyClass-Custom.h的代码才能访问anotherIvar。您可以在同一个类上创建更多类扩展以获取其他访问组。

答案 2 :(得分:0)

您必须编写自己的setter和getter方法。

- (id) get_abc_value:(id)from {
if ([from isKindOfClass:[SomeRespectedClass class]]) {
return abc;
} 
return nil;
}