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

在Objective-C中创建常量的最佳方法是什么

支嘉祥
2023-03-14
    null

另外,如果使用extern const,是否需要导入文件,或者不导入文件,常量将全局可用?

我可以从逻辑上得出一个结论,即enum是定义自定义错误域之类的东西时的最佳选择(我真的对吗?)。但其他人呢?

共有1个答案

淳于乐池
2023-03-14

第一个问题是你希望你的常数有什么范围,这实际上是两个问题:

  • 这些常量是特定于单个类的,还是在整个应用程序中都有这些常量?
  • 如果它们是特定于类的,那么它们是供该类的客户端使用,还是仅在类内使用?

如果它们是特定的并且是单个类内部的,那么在。m文件的顶部将它们声明为静态常量,如下所示:

static NSString *const MyThingNotificationKey = @"MyThingNotificationKey";
//.h
extern NSString *const MyThingNotificationKey;

//.m
NSString *const MyThingNotificationKey = @"MyThingNotificationKey";

现代的答案是因为调试器不知道您的宏。如果mythingnotificationkey是宏,则不能在调试器命令中说[myThing addobserver:self forkey:mythingnotificationkey];只有当它是变量时,调试器才能知道它。

嗯,rmaddy在注释中比我更好:enum只能定义整数常量。像串行标识符号、位掩码、四字节码等。

对于这些目的,enum非常好,您绝对应该使用它。(更好的方法是使用ns_enumns_options宏。)对于其他的东西,你必须用其他的东西;枚举只做整数。

每个解决方案的用例是什么?

  • #define:非常有限。老实说,我不确定是否有充分的理由再将此用于常量。
  • const:最适合本地常量。此外,您必须将其用于在标头中声明并正在定义的。
  • 静态常量:最适合于特定于文件(或特定于类)的常量。
  • extern const:导出标头中的常量时必须使用它。

另外,如果使用extern const,是否需要导入文件,或者不导入文件,常量将全局可用?

 类似资料:
  • 问题内容: 我看过这样的例子: 并假设我可以有一个Constants类来包装常量,并声明它们为static final。我几乎不了解Java,并且想知道这是否是创建常量的最佳方法。 问题答案: 这是完全可以接受的,甚至可能是标准。 类型是哪里,是所有大写字母的名称,下划线带有空格,并且VALUE是常量值; 我强烈建议不要将常量放在自己的类或接口中。 附带说明:声明为final且可变的变量仍然可以更

  • 问题内容: 我正在寻找一种库/方法来解析比通用xml解析库具有更多html特定功能的html文件。 问题答案: 这是一个敏捷的HTML解析器,它构建了一个读/写DOM并支持纯XPATH或XSLT(您实际上不必了解XPATH或XSLT来使用它,不用担心…)。这是一个.NET代码库,可让您解析“网络外” HTML文件。该解析器对“真实世界”格式的HTML十分宽容。对象模型与提出System.Xml的对

  • 为了让这个布局正常工作,我已经挣扎了好几个小时。 这是我的代码: 每个片段都是一个简单的RelativeLayout(都有相同的视图): 现在我想让它像这样工作: > 1) 无嵌套layout_weight 2)完全没有嵌套(例如嵌套2个第一个片段等) 3)在视图呈现后,不使用代码以编程方式完成。 在我看来,最简洁、可读性最强的方法是将片段1和片段2的方向设置为水平,将片段3设置为垂直,但它不起作

  • 问题内容: 好吧,这并不是一个问题,因为我并没有真正“卡住”我的代码,但是我发现Android API在访问外部存储设备和File.createTempFile()方法方面有些奇怪的行为, d想了解正在发生的事情… 请注意,我的清单 中不 包含。 第1部分 : 我有以下代码,它 确实可以 发挥作用: 它会为我创建一个临时文件,并且我可以毫无问题地在其中写入数据。 问题1 :为什么该功能有效,因为我

  • 问题内容: 例如,在Java中,我可能有一个类,并且有一个名为的静态方法,因此我可以执行以下操作: 我该如何在目标C中做类似的事情? 非常感谢 问题答案: 在Objective-C中,您将此称为“类方法”,请参见此处: 该 + 是最重要的事情; 您可以这样调用方法: