如果不使用属性,我们如何在iOS中的另一个类中访问变量?

时间:2014-04-25 08:11:50

标签: ios objective-c

  • 如果我想访问在A类和I类中声明的变量 想要在B类中使用该变量。
  • 我不想使用Property。
  • 我该怎么办?

4 个答案:

答案 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
}

请注意,键可以是方法名称,也可以是变量。