0

ObjCで、サブクラスのスーパークラスのメソッドの実装を非表示にするにはどうすればよいですか?

@privateがこのトリックを実行するかどうかはわかりません。これは、ivarにのみ適用されるように見えるためです。

4

3 に答える 3

1

そうです、@privateディレクティブはインスタンス変数であり、メソッドではありません。メソッドの実装を非表示にするには、ヘッダーファイルからその宣言を省略します。警告を抑制するために、カテゴリまたはクラス拡張子を使用して.mファイル内のメソッドを宣言できます。

ただし、サブクラスがメソッドを認識できないようにする組み込みの言語機能はありません。なぜあなたはそれをしたいのですか?

于 2011-09-21T22:27:26.787 に答える
0

Obj-Cには実際には「プライベート」メソッドはありません。実行時に任意のメッセージを任意のオブジェクトに送信できるため、気になるメッセージを誰かが送信するのを防ぐ方法はありません。

そうは言っても、サブクラスでそのメッセージをインターセプトして処理することはできません。スーパークラスのメソッドにアクセスできないようにする最も簡単な方法は、サブクラスでそれをオーバーライドし、何もしないことです。

- (void)someMethodIDontWantToSupport
{
}
于 2011-09-21T22:27:09.880 に答える
0

サブクラスインターフェイスファイルのようにマークします。

- (void)someMethodIDontWantToSupport __unavailable;
于 2021-06-01T10:13:15.560 に答える