-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。さらに、クラス名 を使用してfooいますが、 という名前のインスタンス変数にアクセスしようとしているようですab。インスタンス変数にアクセスする場合は、最初にクラスのインスタンスを作成する必要があります。

foo f = [foo new];

この@privateキーワードによりb、 class で定義されたメソッド以外からアクセスできなくなりますfoo

アップデート:

コードが正しいことを確認しました。では、なぜ外部の変数にアクセスできるのでしょうか。

Objective-C コンパイラでコンパイルしている場合、通常は次のことはできません。

プライベート変数のエラー イメージ

コードをコンパイルして にアクセスできる場合はb、奇妙なことが起こっています。使用しているコンパイラと設定は?

于 2012-09-21T02:58:39.647 に答える