1

(Objective-C は初めてですが、C/C++ に精通しています)。

現在、Objective-C クラスがあり、そのメンバー変数の多くは関数ポインターになります。これらの関数ポインターは、クラス自体によってのみ変更されますが、他のクラスによって使用される場合があります。

上記の関数ポインターへのアクセスを設定する方法がわかりません。

私が現在思い描いている解決策は、上記の関数ポインター @public を宣言することです。これにより、-> 演算子を使用してそれらを呼び出すことができると理解しています。これは、私にはかなり満足できないように思えます。なぜなら、関数ポインタは干渉を受けやすいままであり、健全な OOP に直面して飛ぶからです。

私の次の傾向は、@property を使用し、それらを読み取り専用と宣言することです。これより正気のようです。getter を使用して関数ポインターを取得し、それを呼び出すという考えはまったくばかげているように見えるため、ドット演算子を使用してそれらを呼び出すと思います。

関数ポインタをプロパティとして使用できますか? もしそうなら、これらをプロパティとして宣言する方法は次のとおりです。

void (*sort)(SET, int) ;
char *(*toASCII)(CARD) ;

これらをプロパティとして宣言するには、わずかなニュアンスが欠けていると感じています。

4

2 に答える 2

1

関数ポインタをプロパティとして使用できるはずです。次のようにします。

@property (nonatomic, readonly) char *(*toASCII)(CARD);

そして、あなたの実装では:

@synthesize toASCII;

それで

object.toASCII();
于 2010-09-27T03:23:26.000 に答える
1

あなたの @interface で:

@property(readonly) void (*sort)(SET, int);
@property(readonly) char *(*toASCII)(CARD);

あなたの @implementation で:

@synthesize sort, toASCII;

init メソッド (または関数ポインターを設定する他の場所) で:

sort = someFunction;
toASCII = someFunction;

最新バージョンの iOS では、ivar を追加する必要さえありません (@synthesize を実行すると自動的に追加されます)。

于 2010-09-27T03:23:53.330 に答える