7

クラスにプライベート変数があり、外部クラスからその変数にアクセスしようとしています。これを行う方法はありますか?

4

3 に答える 3

26

プライベート インスタンス変数は、定義上、プライベートです。外部からアクセスすることはできません。クラスの作成者である場合は、変数のアクセサ メソッドを提供する必要があります。そうでない場合は、変数へのアクセスを控えてください。

ただし、その制限を回避する方法があります。

最初のクラスにカテゴリを作成し、インスタンス変数のアクセサ メソッドを追加できます。

または、キー値コーディングを使用して変数にアクセスすることもできます。

[オブジェクト valueForKey:@"変数名"];
于 2012-06-26T14:51:00.277 に答える
1

定義上プライベートとは、外部クラスからアクセスできないことを意味します。プライベート データにアクセスする唯一の実際の方法は、インターフェイスで提供されるアクセサ メソッドを使用することです。

Objective-c では、カテゴリと呼ばれるものを作成できます。これらは、クラスの機能を拡張するために基本的に使用できるメソッドのグループです。外部クラス (完全な実装がないもの) で宣言されたプライベート メンバーへのアクセスを取得することについては肯定的ではありませんが、プライベート メンバーにアクセスする独自のクラスのカテゴリを作成することはできました。

#import "OtherClass.h"

@interface OtherClass(RandomAccessor)

-(int) getMyVar;

@end

@implementation OtherClass(RandomAccessor)

-(int) getMyVar
{
    return self->myPrivateVar;
}

@end

ただし、開発者は通常、何らかの理由でデータを非公開にするため、このようなことを行うことはあまりお勧めしません。

于 2012-06-26T14:49:47.680 に答える
0

独自の get/set メソッドを作成できます...または、.h ファイルで変数をプロパティとして宣言し、それを .m ファイルで合成することにより、Objective-C 標準を使用できます...覚えておいてください。他のクラスが変数を見てアクセスできる場合、それはもはや「プライベート」変数ではありません

testViewController.h

@interface testViewController : UIViewController
{
    NSString *someString;
}

@property (nonatomic, retain) NSString *someString;

@end

testViewController.m

#import testViewController.h

@interface testViewController
@synthesize someString=_someString;
@end
于 2012-06-26T14:49:21.590 に答える