のオーバーロードは@
危険な領域に足を踏み入れ始めていますが、Clang 3.1 での新しい Objective-C リテラルの追加が気に入っています。残念ながら、新しいリテラルは私にはあまり役に立ちません。コードが AppKit とやり取りする必要がある場合を除いて、私は独自のカスタム フレームワークを優先して Foundation クラスの使用をほとんどやめました (さまざまな理由で、そのほとんどは、使用されるメモリ割り当てパターンを直接制御する必要があるためです)。オブジェクトによって)。
新しく作成されたオブジェクトをカスタム クラスとして渡すために、いつでもランタイムのトリックを使用できます (これは、Apple 以外の GCC ランタイムのみが-fconstantstring=class
フラグをサポートするため、文字列オブジェクト リテラルで既に行う必要があることです) が、これはハックです。せいぜい、最初から同等の Foundation クラスを置き換えることによって得たすべての利点を捨ててしまいます。
文字列オブジェクト リテラルとは異なり、Clang が実装する新しいリテラルは実際には定数クラスではありません (メモリ レイアウトがハードコーディングされている場合)。代わりに、適切なメッセージがそれぞれのクラスに送信され、実行時に新しいオブジェクトが作成および初期化されます。オブジェクトを自分で作成した場合と結果は変わりません。理論的には、使用されるクラスと新しいリテラルによって呼び出されるメソッドがハードコードされていないことを意味します。実際には、私自身のカスタム クラスとメソッドを指すようにそれらを変更する方法を見つけることができません (実際には、カスタム クラスを指すだけで十分です。実行時にダミー メソッドを実際のメソッドに指すことは難しくありません)。 )。
これを最初に調べたとき、私が求めていることを行うために使用できるフラグのセットを見つけることを本当に望んでいましたが、何も見つからなかったので、誰かが解決策を持っていることを願っています.