このProtocol
クラスは Leopard/ObjC 2.0 から廃止されました。* したがって、このクラスにはメソッドも現在のドキュメントもありません。プロトコルと対話する唯一の方法は、ランタイム関数を使用することです。
プロトコルのメソッド リストに含まれる構造体もオブジェクトではないため、NSArray
とにかくラップせずに に入ることができませんでした。
から返された配列を扱うのは特に難しいことではありませんprotocol_copyMethodDescriptionList()
。あなたはそれを覚えておく必要がfree()
あります。特定のセレクターを念頭に置いている場合は、 を使用してプロトコルを確認することもできますprotocol_getMethodDescription()
。この場合、メモリ管理は必要ありません。例えば:
BOOL method_description_isNULL(struct objc_method_description desc)
{
return (desc.types == NULL) && (desc.name == NULL);
}
const char * procure_encoding_string_for_selector_from_protocol(SEL sel, Protocol * protocol)
{
static BOOL isReqVals[4] = {NO, NO, YES, YES};
static BOOL isInstanceVals[4] = {NO, YES, NO, YES};
struct objc_method_description desc = {NULL, NULL};
for( int i = 0; i < 4; i++ ){
desc = protocol_getMethodDescription(protocol,
sel,
isReqVals[i],
isInstanceVals[i]);
if( !method_description_isNULL(desc) ){
break;
}
}
return desc.types;
}
*実際、(ランタイム リファレンスのメモに基づいて) 名前はClass
.