Objective-C では、どちらがより良いコーディング方法ですか?
// バージョン #1
id obj<MyProtocol>;
[obj myMessage];
// バージョン #2
id obj;
if( [[obj class] conformsToProtocol:@protocol(MyProtocol)] )
[obj myMessage];
何らかの理由でサンプル コードにバージョン 1 が表示されますが、私にはバージョン 2 の方が安全に思えます。実行時にプロトコル MyProtocol に準拠しない汎用 ID から obj が割り当てられた場合はどうなりますか?