2013-04-20 47 views
0

是否有一种优雅的方式来获取项目中使用的类的列表?项目中使用的类

我知道objc_getClassList(...)它获取Objective-C中的所有类,我试图避免使用class_conformsToProtocol来过滤类。

谢谢。

+0

那么,你可以随时查看构建中的.m文件列表。 – 2013-04-20 01:51:35

+0

通过“get”,你想查看项目中的类列表,还是想在运行时使用'NSArray',它包含项目中的所有类? – iluvcapra 2013-04-20 02:59:13

+0

我知道显示项目中的类的类视图。我怎样才能使用代码并且不用在我的类前加上任何东西?所以像objc_getClassList,但只拿起我的项目中的类。 – Komposr 2013-04-20 16:28:45

回答

2

在Xcode中,按Cmd的 + 打开符号导航并按下左下角的图标C通过类进行过滤。

您可以通过按C图标旁边的文档图标进行更多筛选。结果将只包含您的项目中定义的类。下面是你必须点击标记为红色的按钮图片:

Picture of Xcode symbol navigator filtering by classes and project

1

该代码将搜索你的运行所有以指定,并返回其名称(类型而不是编译类前缀开头类,当心):

NSArray *AllClassNamesInRuntimeWithPrefix(NSString *myClassPrefix) { 
    NSMutableArray *retObj = [NSMutableArray array]; 

    int nClasses = objc_getClassList(NULL, 0); 
    if (nClasses > 0) { 
     Class allClasses[] = malloc(nClasses * sizeof(Class)); 
     nClasses = objc_getClassList(allClasses, nClasses); 

     int i; 
     for (i = 0; i < nClasses; i++) { 
      NSString *thisClassName = NSStringFromClass(allClasses[i]); 
      if ([thisClassName hasPrefix:myClassPrefix]) { 
       [retObj appendObject:thisClassName]; 
      } 
     } 
     free(allClasses); 
    } 
    return [NSArray retObj]; 
} 

在运行时在搜索项目中的每一个类是有点苛求的,因为运行时没有一个格局“工程”,类可以在可执行文件存在或者在框架中,并且可以随时加载。

+0

我知道显示项目中的类的类视图。我怎样才能使用代码并且不用在我的类前加上任何东西?所以像objc_getClassList,但只拿起我的项目中的类。 – Komposr 2013-04-20 16:29:03

+0

在运行时,您不能,除非您的应用程序可以使用sorce代码,并且您可以通过它进行grep。你究竟想要做什么? – iluvcapra 2013-04-20 16:55:36

相关问题