0

私はしばらくの間これに苦労してきました。

コントロールの小さな部分を変更したいと思ったことは何度もありましたが、調整するためだけに全体を再描画する必要がありました。NSPathControl のように、パス コントロールの背景を変更したかっただけで、その小さな調整のためだけにまったく新しいコントロールを作成することになりました...

Apple は、次のようなプライベート メソッドを使用します。

- (void)_drawContextMenuHighlightForIndexes:(NSIndexSet *)rowIndexes clipRect:(NSRect)rect;

これは Stackoverflow-Post で見つけました。

これらについてどのように知る必要がありますか? それらが公開されることを意図しているとは思いませんが、これははるかに簡単です。これらの人々はどこからこれを知っていますか?参考文献はありますか?ソース コードを知る必要はなく、プライベート メソッドの名前だけを知っていればよいのです。

私の質問ですが、どうすれば AppKit クラスのプライベート メソッドの名前を取得できますか?

ありがとう

4

2 に答える 2

2

プライベート クラス メソッド名は、Obj-C ランタイム関数を使用して取得できます。クラスのメソッドのリストを取得するには、次のようにします。

unsigned int methodCount;
Method *methods = class_copyMethodList(theClass, &methodCount);
for (int i = 0; i < methodCount; i++) {
    Method method = methods[i];
    NSString *methodName = NSStringFromSelector(method_getName(method));
    // collect name in an array or print it.
}
free(methods);

class-dumpと呼ばれる、これを行う便利な端末ツールもあります。

于 2012-11-14T23:16:05.513 に答える
1

クラスが持つメソッド/プロパティ/変数のランタイムをクエリするか、NSObject にカテゴリを追加することで実行時にこれを行う github の便利なツール (DDDump) を使用します。

NSLog(@"%@", [obj dump]);

NSObjCMessageLoggingEnabled環境変数は、要求されていませんが、そのコンテキストで非常に役立ちます。これにより、YES の場合、ディスパッチが行われたことを確認できます。


ああ、すべての通知を取得することも常に良い考えです:)

于 2012-11-14T23:20:03.740 に答える