ObjCで、サブクラスのスーパークラスのメソッドの実装を非表示にするにはどうすればよいですか?
@privateがこのトリックを実行するかどうかはわかりません。これは、ivarにのみ適用されるように見えるためです。
ObjCで、サブクラスのスーパークラスのメソッドの実装を非表示にするにはどうすればよいですか?
@privateがこのトリックを実行するかどうかはわかりません。これは、ivarにのみ適用されるように見えるためです。
そうです、@private
ディレクティブはインスタンス変数であり、メソッドではありません。メソッドの実装を非表示にするには、ヘッダーファイルからその宣言を省略します。警告を抑制するために、カテゴリまたはクラス拡張子を使用して.m
ファイル内のメソッドを宣言できます。
ただし、サブクラスがメソッドを認識できないようにする組み込みの言語機能はありません。なぜあなたはそれをしたいのですか?
Obj-Cには実際には「プライベート」メソッドはありません。実行時に任意のメッセージを任意のオブジェクトに送信できるため、気になるメッセージを誰かが送信するのを防ぐ方法はありません。
そうは言っても、サブクラスでそのメッセージをインターセプトして処理することはできません。スーパークラスのメソッドにアクセスできないようにする最も簡単な方法は、サブクラスでそれをオーバーライドし、何もしないことです。
- (void)someMethodIDontWantToSupport
{
}
サブクラスインターフェイスファイルのようにマークします。
- (void)someMethodIDontWantToSupport __unavailable;