1

クラス「mConWifi」のオブジェクトを持つdylibがあります。このdylibをロードして次のコードを実行するメインアプリがあります

Class klass = objc_getClass("mConWifi");
SEL sel = sel_getUid("ListAllWifi:");
if ( [klass respondsToSelector:sel] )
    objc_msgSend(klass, sel);

上記のコードが呼び出されると、クラス mConWifi のオブジェクトが既にメモリに作成されています。

私の目的は、クラス名に基づいてオブジェクトを取得し、メソッドを呼び出すことです。上記のコードでは、respondsToSelector が失敗するため、できません。私はすでに「ListAllWifi」と「ListAllWifi:」を試しました。

クラス名に基づいてクラスのオブジェクトを取得する方法はありますか?

前もって感謝します。

4

1 に答える 1

2

あなたの問題は、クラスのメソッド(で宣言されている+)をテストしようとしていると思いますが、実際にはで宣言されたインスタンスメソッドがあります-

これを試して:

Class klass = objc_getClass("mConWifi");
SEL sel = sel_getUid("ListAllWifi:");
if ( [klass instancesRespondToSelector:sel] ) {
    id object = [[klass alloc] init];
    objc_msgSend(object, sel);
}
于 2013-09-05T13:16:32.880 に答える