1

定数のゲッターとセッターを作成することは可能ですか? 定数を直接参照し、値が nil の場合はインスタンス化します。次のように宣言された定数:

// Prefs.h
extern MyClass * const kThing;

// Prefs.m
MyClass * const kThing = nil;

ゲッター/セッターは次のようになります。

// getter
+ (MyClass *)kThing
{
    _kThing = _kThing ? : [MyClass new];
    return _kThing;
}

// setter
+ (void)setKThing:(MyClass *)myClass
{
    _kThing = myClass
}

そして、次のように使用できます。

[kThing doSomething];

これは可能ですか?

editメソッドをクラスメソッドに編集しました

4

3 に答える 3

2

あなたが説明するのは定数ではなく、グローバル変数です。それらの getter と setter を定義することはできませんが、それらの値を使用してクラス メソッドをバックアップすることはできます。これはまさにあなたが行ったことです。

ただし、このようなメッセージを送信すると

[kThing doSomething];

グローバル変数は、ゲッターをバイパスして直接使用されます。ゲッターを通過したい場合は、次のように書くことができます

[[MyClass kThing] doSomething];

またはMyClassあなたのメソッドの中で書くことができます

[[[self class] kThing] doSomething];

もう 1 つの注意点は、そのようなアクセサー メソッドを実装する場合は、バッキング変数をextern. これにより、他のモジュールはゲッターをバイパスしてこれらの変数にアクセスできなくなります。

于 2013-04-06T02:52:11.020 に答える