答案 0 :(得分:2)
在不将其作为属性的情况下声明公共变量是不好的做法。
您也可以使用KVC访问(包括读取和写入)ivar,即使它是只读的。
[instanceOfMyClass valueForKey:@"myIvar"];
我希望有人发现我的第一个stackOverflow答案有用:)
答案 1 :(得分:0)
好吧,您可以将变量声明为public并使用selector运算符访问它,但不建议这样做:
@interface A:NSObject{
@public
int x;
}
@end
...
//Somewhere inside class B
A *a = [[A alloc] init];
a->x;
然而,很难想象为什么使用房产会更好。
答案 2 :(得分:0)
@interface Class1
{
@public
int var; // if you not declare it public by default it'll be protected
}
// methods...
@end
// Inside a Class2 method:
Class1 *obj = ...;
obj->var = 3;
但物业方法要好得多。
答案 3 :(得分:0)
我可以考虑访问变量的4种可能情况是:
1将A类中的变量声明为公共
@public
BOOL _test;
完全不推荐。如果您需要公共变量,则使用属性。
2使用属性。
@property (readonly, getter = myMehtodName) id myVariable;
3使用自定义方法。在实践中,它的作用与具有readonly属性的属性相同。您也可以使用点符号访问它。
4使用KVC访问变量。 当您在编译时不知道属性/变量的名称时,这可能很有用。 一个小例子:
NSString *myKey = [self obtainKey];
id myVariable = [self valueForKey:myKey];
if ([myVariable isKindOfClass:[NSString class]]) {
//Do something
}else {
//Do another thing
}
请注意,键可以是方法名称,也可以是变量。