1

NSClassFromString 関数など、Objective-C Foundation 関数の実装を置き換える方法はありますか? 私はもちろんclass_replaceMethodを認識していますが、クラス メソッドに対してのみ機能し、一般的な関数に対しては機能しないようです。

4

1 に答える 1

3

これらの関数は単なる C 関数および/またはマクロ (Objective C は C 上に構築されています) であり、C 関数を置き換えることはできません。

ただし、 a を使用しdefineて名前をマスクできます。

Class MyNSClassFromString( NSString* blah ) {
    return whatever;
}

#define NSClassFromString MyNSClassFromString

その時点から、呼び出しNSClassFromString(@"hi")はカスタム関数を呼び出します。これにはいくつかの制限があることに注意してください: 上記のdefineコード (または使用しているライブラリ内のコード) は変更されません。多くの場合、インテリセンスが不満になります。NSClassFromString最初にマクロとして定義されている場合は機能しません。場所 (#undef NSClassFromStringその場合、定義の前に追加できます)。

一般に、これはお勧めしませんが、本当にやりたいのであれば、可能性はあります。

于 2013-08-21T18:33:42.177 に答える