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

您可以在运行时查询类具有的方法/属性/变量,或者使用来自 github 的便捷工具 (DDDump),该工具在运行时通过在 NSObject 上添加类别来执行此操作

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

NSObjCMessageLoggingEnabled环境变量没有被要求但在该上下文中也非常有用,它 - 当是时 - 允许您查看任何调度完成!


哦,获取所有通知也总是一个好主意:)

于 2012-11-14T23:20:03.740 回答