当前位置: 首页 > 知识库问答 >
问题:

最小化标题导入

许法
2023-03-14

我只是为自己想了一个简单的场景来玩NSClassFromString和Objective-C运行时。

背景:

假设我有一个类方法,在这个方法中,我根据某个条件从一个类创建了一个实例,比如:

Class class;
id object;
if(classNumber == 1)
{
    //create ClassA
    class = NSClassFromString(@"classA");
    object = [[class alloc] init];
}
else if(classNumber == 2)
{
    //create ClassB
    class = NSClassFromString(@"classB");
    object = [[class alloc] init];
}
else if(classNumber == 3)
{
    //create ClassC
    class = NSClassFromString(@"classC");
    object = [[class alloc] init];
}
else
{
   object = nil;   
}
return object;

对于运行时版本,我会分别替换上面的并在上面的if-elseif-ett中使用:

Class class = objc_allocateClassPair([classA class], "mySubClass", 0);
...
Class class = objc_allocateClassPair([classB class], "mySubClass", 0);
...
Class class = objc_allocateClassPair([classC class], "mySubClass", 0);
...

两个版本都很好。但我必须导入,尽管如此,所有这些classX。

考虑到这是一个类方法并且只会被调用一次,我想知道是否有一些聪明的方法可以创建一个类而不必导入所有这些标头。

我知道答案很可能是“否”,因为编译器需要在编译时知道类及其方法签名。

但我的经验是,每当我说“好吧,我想我在这里有点用力。让我们解决现在似乎有效的问题”,就会有人走过来反驳我的满意,说“嘿,看这里,有一个更好/更聪明的方法来做到这一点。这是可能的。”所以我想我会问。

总结一下这个问题:如果我们只需要从需要导入的文件之一创建一个类,那么是否可以尽可能地减少#importing?或者有没有什么聪明的方法可以动态导入头文件?

共有1个答案

蔚丰
2023-03-14

首先,我真的不明白这有什么意义。一方面,您仍然需要将所有这些类的目标文件链接到最终的二进制文件中。因此,您无法通过使用反射和操作您的包含来最小化二进制文件的大小。

因此,您只能尝试优化include语句的数量。仅仅删除几行代码真的值得吗?当然,您可以将所需的头文件包含到一个新的头文件中,只需包含该头文件即可。这将把包含的数量减少到1。值得这么麻烦吗?我不知道。

 类似资料:
  • 如何学习? 0)单元测试 1)最小化问题 2)带着疑问学习 3)反复区分状态,语境 4)培养成就感 想想本文是如何带你这样玩的?

  • 给定一个正整数的矩阵(非正方形),其中同一行上的所有元素都是可置换的,问题是最小化列的最大和和最小和之间的差异。 例如 答案是2。 我试着天真地对它进行分类(合并)

  • 我在这个问题上使用了公认的答案:JavaFX最小化未装饰阶段,以适当地最小化我的应用程序。 然而,不幸的是,默认窗口最小化了 我知道可以在未装饰的窗口中显示动画,因为我有一个应用程序具有这种行为(PotPlayer)。 如何使用JNA制作动画? 编辑:这是一个可以正常最小化JavaFX窗口的Kotlin代码段,还添加了bounty。

  • 本文向大家介绍C#实现WinForm禁止最大化、最小化、双击标题栏、双击图标等操作的方法,包括了C#实现WinForm禁止最大化、最小化、双击标题栏、双击图标等操作的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现WinForm禁止最大化、最小化、双击标题栏、双击图标等操作的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 我在apache camel中定义了restendpoint(在karaf中运行),我收到了非常大的(>8500)头。Jetty抛出431状态代码(请求头字段太大)。是否有可能避免检查头的大小(只是暂时的)或改变限制?我是这样使用jetty的:

  • 1.2.4. 暴露最小化 PHP应用程序需要在PHP与外部数据源间进行频繁通信。主要的外部数据源是客户端浏览器和数据库。如果你正确的跟踪数据,你可以确定哪些数据被暴露了。Internet是最主要的暴露源,这是因为它是一个非常公共的网络,您必须时刻小心防止数据被暴露在Internet上。 数据暴露不一定就意味着安全风险。可是数据暴露必须尽量最小化。例如,一个用户进入支付系统,在向你的服务器传输他的信