-1

我是Objective C的新手。我发现可以访问外部的私有变量。我只是收到一个警告,如下所示:

@interface foo : NSObject
{
   @private 
        int b;
}
-(id) init;
@end
//omit the implement
int main()
{
    foo *a = [[foo alloc] init];
    printf("%d", a->b);
}

那么 private 关键字只适用于它的子类吗?如果是,为什么需要受保护的关键字

4

1 回答 1

0

您提供的代码访问ab,而不是b. 此外,您正在使用类 name foo,但您似乎正在尝试访问名为 的实例变量ab。如果你想访问一个实例变量,你首先需要创建一个类的实例:

foo f = [foo new];

@private关键字阻止您从b除 class 定义的方法之外的任何地方进行访问foo

更新:

我保证现在代码是正确的。那么为什么我可以在外面访问变量。

如果您使用 Objective-C 编译器进行编译,通常不能:

私有变量错误图像

如果您能够获取代码以进行编译和访问b,那么就会发生一些奇怪的事情。你使用什么编译器,什么设置?

于 2012-09-21T02:58:39.647 回答