4

MobileSubstrateの調整に関して%newと%classはどういう意味ですか?例えば:

%class TPBottomLockBar;

%new(v@:)

二重の質問でごめんなさい!

4

1 に答える 1

16

これらは両方ともLogosコンストラクトです。%new実行時にクラスに新しいメソッドを追加するためのものであり、その構文は%new(typeencoding);です。Objective-Cタイプのエンコーディングに関する情報は、AppleのObjective-Cランタイムドキュメントで入手できます。これらのメソッドの最初の2つの引数は常にidとSELであるため、タイプエンコーディングの次の2文字は" @:"である必要があることに注意してください。最初の文字は戻り型であり、それ以外はカスタム引数のセットです。

例として、これはかなり役に立たない方法です:

%hook NSMutableString
%new(v@:)
- (void)appendAwesomeThings {
    [self appendString:@"Awesome."];
}
%end

(NSStringはクラスクラスターであるため、これは実際にはおそらく機能しませんが、例として役立ちます!)

%class実行時に使用されるクラスを転送宣言するための非推奨のディレクティブです。%c(ClassName)インラインで使用されるに置き換えられました。例えば、

[[%c(NSString) alloc] initWithString:@"Cool."];
于 2011-07-21T04:10:45.137 に答える