我一直在努力解决这个问题。
有很多次我想在控件中改变一些小的东西,但我不得不重新绘制整个东西来调整它。 就像NSPathControl一样,我只是想改变路径控制的背景,最后我为这个小调整创建了一个全新的控件......
Apple使用私有方法,如下所示:
- (void)_drawContextMenuHighlightForIndexes:(NSIndexSet *)rowIndexes clipRect:(NSRect)rect;
我在Stackoverflow-Post中找到了这个。
我应该怎么知道这些? 我不认为它们是公开的,但这只是方便。 这些人从哪里知道这个? 有没有参考?我不需要知道任何源代码,我只需要知道私有方法的名称。
所以我的问题是,如何获取AppKit类的私有方法的名称?
由于
答案 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 环境变量,当 - 是 - 允许您看到任何调度完成!
哦,获取所有通知也总是一个好主意:)