名前修飾
文字による表現を操作するよりもセレクタを管理する方がメソッドを効果的に扱うことができる。セレクタがマッチするのはメソッドの名前だけであり、それが属するクラスではないということに注意してほしい。クラスが異なれば同じ名前のメソッドでも実装が異なることがある。このため、メソッドの実装にも特別の識別子が与えられる — 実装ポインタ (implementation pointer) と呼ばれ、IMP 型を持つ。
オブジェクトにメッセージを送ると、それはコンパイラによって、 id objc_msgSend(id receiver, SEL selector, ...) 関数ないしはその従兄弟のどれかに対する呼び出しとしてエンコードされる。ここで、receiverはそのメッセージの受け手であり、SELによって呼び出されるメソッドが決まる。各々のクラスはそれ自身の表を持っており、セレクタと実装 — メソッドの実体が存在するメモリ空間を指定する実装ポインタ — との相互対照ができるようになっている。また別の表にはクラスとインスタンスメソッドが記録される。SELからIMPへの対照表に格納されることはさておき、関数は本質的に無名である。
あるセレクタに対するSELの値はクラスによって変わることがなく、多態性を実現している。
Objective-Cの実行環境はメソッドの引数と返り値の型についての情報を保持しているが、メソッドの名前の一部として保持されるわけではなく、クラスによって変化しうる。
Objective-Cは名前空間をサポートしないので、クラス名を修飾する必要はない。
Java Native Interface (JNI) はJavaとネイティブコードを双方向に相互運用するための標準仕様である。Javaのネイティブメソッドサポートによって、Javaで記述されたプログラムから他の言語(通常CまたはC++)で書かれたプログラムを呼ぶことができる。ここでは2つの名前解決に関する懸念があるが、いずれも特に標準的な作法で実装されてはいない。
JVMからネイティブ名への変換: オラクルがスキームを公開している。
一般的なC++の名前修飾: 前述を参照。
これとは別に、Java Native Access (JNA) は、Javaプログラムからネイティブの共有ライブラリにアクセスする方法をライブラリレベルで提供する。