在objective-c中,对变量的访问仅限于三种类型:@public
,@private
,@protected
(默认)和@package
..这些访问修饰符允许我们按顺序通过4种情况访问变量:
1-从任何地方访问变量。
2-只在类中访问变量。
3-从类及其子类中的任何位置访问变量。
4-从框架中的任何位置访问变量。
我的问题是:有没有办法定义某些类可以访问的变量而不是其他类? (即变量的自定义范围)
答案 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;
}