[解決済み] Objective-Cで抽象クラスを作成する
2022-03-18 17:17:25
質問
私はもともとJavaのプログラマーで、今はObjective-Cを使って仕事をしています。抽象クラスを作りたいのですが、Objective-Cではそれができないようです。これは可能なのでしょうか?
そうでない場合、Objective-Cではどの程度抽象クラスに近づけることができるのでしょうか?
どのように解決するのか?
通常、Objective-Cのクラスは慣習によってのみ抽象化されています。もし作者がクラスを抽象化すると文書化した場合、サブクラス化せずに使用すればよいのです。しかし、抽象クラスのインスタンス化を阻止するコンパイル時の強制力はありません。実際、ユーザが抽象メソッドの実装をカテゴリ経由で(つまり実行時に)提供することを止めるものは何もないのです。少なくとも、抽象クラスのメソッド実装で例外を発生させれば、特定のメソッドをオーバーライドすることを強制できます。
[NSException raise:NSInternalInconsistencyException
format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)];
メソッドが値を返す場合は、もう少し簡単に
@throw [NSException exceptionWithName:NSInternalInconsistencyException
reason:[NSString stringWithFormat:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)]
userInfo:nil];
を使用すると、メソッドから return 文を追加する必要がなくなります。
抽象クラスが本当にインターフェースである場合(つまり、具象メソッドの実装がない場合)、Objective-Cのプロトコルを使用するのがより適切な選択肢です。
関連
-
[解決済み] .02fと%.2fの違いは何ですか?
-
[解決済み] デバイス用にコンパイルするとApple Mach-Oのリンカーエラーが発生する。
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] performSelectorのセレクタが不明なため、リークが発生する可能性があります。
-
[解決済み] 抽象クラスはコンストラクタを持つことができますか?
-
[解決済み] iOS 8で位置情報サービスが利用できない
-
[解決済み】Pythonで抽象クラスを作ることは可能か?
-
[解決済み] Swift言語における抽象クラス
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] イニシャライザーの要素がコンパイル時定数でない
-
[解決済み] Objective-Cのnil、NIL、nullの違いについて
-
[解決済み] NSStringをNSNumberに変換する方法
-
[解決済み] メソッド名と行番号を出力し、NSLogを条件付きで無効にする方法は?
-
[解決済み] ブロック内の変数をブロック外の変数に代入する
-
[解決済み】iOS 7で非推奨のsizeWithFont:の代わりになるものは?
-
[解決済み】このブロックで自己を強く捉えると、リテインサイクルになりそうです。
-
[解決済み] [Solved] UITableViewがReloadDataを完了したことを伝えるには?
-
[解決済み】iOSでメールアドレスが有効であることを確認する【重複あり
-
[解決済み] Objective-Cで-initメソッドをprivateにすることは可能ですか?