3

私はしばらくの間検索しましたが、誰もこの質問をポップしなかったことに驚いたので、ここに行きます:

id引数を取るObjective-Cメソッドがあります。次に、次のアクションに有効かどうかを判断するために使用respondsToSelector:します。有効でない場合は、バックアップ計画があります。(これはASSERT(0):Pではありません)

だから、誰かが私を台無しにしてパスしようとすると(id)someC++Object、もちろん、私は大きなクラッシュを起こします。

私の質問は単純です:respondsToSelector:バックアップ計画を使用できるように、C ++オブジェクトを安全に失敗させることができますか(コーダーを顔にパンチする)?

4

1 に答える 1

4

要するに、あなたはできません。

少なくとも、確実ではなく、まともな方法でもありません。また、率直に言って、気にする必要はありません。そのレベルの防御プログラミングは、Cベースの言語に直面してもまったく無駄です。

少なくとも、次のことを行う必要があります。

  • ポインタがアクセス可能なメモリを指していることを確認します
  • 現在の割り当てを指す
  • 最初のアドレスサイズのチャンクは、Objective-Cクラス(おそらく派生クラスを含む)を指します

isKindOfClass:一般に、(委任パターンの外で)とを多用するコードはrespondsToSelector:、Objective-Cデザインパターンの標準とはまったく異なります。

または、別の言い方をすれば、コンパイル時に多くの有効性パラメーターをチェックするのに非常に優れた静的型チェックコンパイラーがあります。これを使って。

于 2012-05-12T03:58:08.467 に答える