相关疑难解决方法(0)

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

我正在创建一个用于学习目的的Reddit客户端.我需要一个包含常量的文件.我正在考虑在文件中导入文件,Reddit-Prefix.pch以使常量可用于所有文件.这是一种很好的做事方式吗?另外,我已经完成了我的研究并发现了几种创建常量的方法,但我不知道使用哪种方法:

  • #define
  • const
  • static const
  • extern const
  • enum

那么首选方式是哪种方式?惯例是什么?我知道"这取决于",但更具体地说,我的问题是:每个解决方案的用例什么?

此外,如果使用extern const,我是否需要导入文件,或者常量可以全局使用而无需导入文件?

我可以在逻辑上得出结论的一点enum是,在定义类似自定义错误域的东西时,这是最好的选择(我实际上是对吗?).但其他人呢?

constants objective-c

154
推荐指数
2
解决办法
7万
查看次数

静态const与extern const有何不同?

在我的iOS/Objective C项目中,我经常使用带有API密钥的constants.h文件等.直到今天,我一直在声明我的常数static const:

static NSString * const kAPIKey = @"wembvkejrvb43789gvbiu2bvfake";
Run Code Online (Sandbox Code Playgroud)

这工作正常,但有一个不幸的缺点,我只能创建基元和NSString文字的常量.其他对象(如UIColor对象)不能存储在此常量中,因为它们无法使用静态文字语法进行初始化(我的理解,需要引用).

在阅读了一些C++文档后,我理解了一些事情:

  • static是不必要的,因为它const是隐式静态的.
  • 调用NSString * const x实际上是在x中声明一个常量和不可变的值.我无法更改值,但可以更改x指向的值.
  • 该const具有内部链接,意味着该值立即定义(在编译时可以推测).

这些结论是否正确?

怎样的extern const不同?我假设它们是外部链接的(因此是extern关键字).它们是在运行时定义的吗?我可以创建某种动态 extern const,可以使用类方法返回的值进行设置吗?

例如,我想创建一个包含UIColor值的全局范围常量.我想使用[UIColor colorWithRed:green:blue:alpha:]类方法构造此颜色值.这显然不适用于我一直在使用的内部链接常量(我假设因为它发生在编译时) - 但是可能使用外部常量,可能在+initialize方法中设置吗?

任何有关此行为细节的详细说明都会非常有用.

objective-c ios

5
推荐指数
1
解决办法
1619
查看次数

标签 统计

objective-c ×2

constants ×1

ios ×1