获取AppKit类的私有方法的名称

时间:2012-11-14 23:09:10

标签: objective-c xcode macos cocoa private

我一直在努力解决这个问题。

有很多次我想在控件中改变一些小的东西,但我不得不重新绘制整个东西来调整它。 就像NSPathControl一样,我只是想改变路径控制的背景,最后我为这个小调整创建了一个全新的控件......

Apple使用私有方法,如下所示:

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

我在Stackoverflow-Post中找到了这个。

我应该怎么知道这些? 我不认为它们是公开的,但这只是方便。 这些人从哪里知道这个? 有没有参考?我不需要知道任何源代码,我只需要知道私有方法的名称。

所以我的问题是,如何获取AppKit类的私有方法的名称?

由于

2 个答案:

答案 0 :(得分:2)

可以使用Obj-C runtime functions获取私有类方法名称。要获取类的方法列表,您可以执行以下操作:

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

答案 1 :(得分:1)

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

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

未请求但在该上下文中真正有用的是 NSObjCMessageLoggingEnabled 环境变量,当 - 是 - 允许您看到任何调度完成!


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