【问题标题】:Should Objective-C constants be wrapped by the implementation block?Objective-C 常量是否应该被实现块包装?
【发布时间】:2014-05-12 19:07:14
【问题描述】:

我正在编写一个 iOS 应用程序。我已经离开 #define 来创建我的常量值。关于这些样式声明的使用,我有几个问题:NSString *const segueToMainMenu

  1. 如果我在内部使用这些,我会将它们放在 .m 文件中。但是,我应该将这些包裹在 @implementation 块周围还是在它之外,或者这有关系吗?我在里面思考,因为它们是特定于实现的,而不是全局的,但我不确定。任何细节表示赞赏。

  2. 1234563部分,然后在@implementation 部分中定义它们?与仅使用 Constants.h 文件并将其与其他标头一起包含的旧方法相比,这有什么好处?为什么我现在需要两个文件?
  3. 标准做法仍然是用“k”前缀命名常量(例如kAnimationDuration)还是我现在应该做MainMenuViewControllerAnimationDuration之类的事情?我想是的,如果是这样,我如何命名它们对数字 1(即不是外部)的常量有影响吗?换句话说,那些在我的实现之外是可见的吗?

非常感谢您的澄清。

【问题讨论】:

  • 您不能将NSString * Constant = @"Contant" 放在 .h 文件中,因为该行可能会在多个 .c/.m 文件中#included ..您最终会得到一个乘法-定义的符号。这就是为什么您在 .h 中声明常量,并在相应的 .c/.m 文件中定义它(一次)。
  • 啊...明白了。我没有这样想过,但是当你这样说时,它完全有道理,我为需要问而感到有点尴尬;)
  • Lew .. 你熟悉使用单例吗?有时常量只是一个坏主意,但有更好的方法。通常(不是每次但通常)当你出于某种原因有常量时——这不是最好的方法。顺便说一句,预处理器很棒:有人可能会争辩说,在极少数情况下您需要常量,它们应该“作为宏工作得很好”。尝试使用更多类别、更多类、更少常量!
  • @JoeBlow 很好——像这样的常量真的是单例。虽然我想编译器可能“唯一”你所有的字符串,如果你使用宏
  • 嘿@nielsbot!一个很好的技术点,但老实说,我相信这不是语言机制问题。压倒性的问题是绝对清晰,并通过使代码非常优雅来为客户(或您自己)增加货币价值。你想要的是热的,Claudia Schiffer 式的代码,真的很漂亮。编译器技术来来去去,嗯...

标签: ios objective-c cocoa-touch


【解决方案1】:

不管你是否将它们放在实现块中——只有方法是类实现的一部分,所以常量的范围无论如何都不会改变。

k 前缀现在有点过时了。通常的做法是将常量命名为<prefix><name>,例如“MDSomeConstant”。

【讨论】:

  • 小心“实现块”这个词。当我读到这句话时,我想到了你可以将私有 ivars 放入其中的花括号。这与简单地将全局变量放在 @implementation 之后(但在花括号之外)有很大的不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多