为了账号安全,请及时绑定邮箱和手机立即绑定

object-C中的常数

object-C中的常数

iOS
Qyouu 2019-06-06 13:21:40
object-C中的常数我在开发一个可可粉应用程序,我使用常量NSStrings作为存储我的首选项的键名的方法。我理解这是一个好主意,因为它允许在必要时很容易地改变键。另外,这是一个“把你的数据和你的逻辑分开”的整体概念。无论如何,是否有一种为整个应用程序定义一次这些常量的好方法?我确信有一种简单而明智的方法,但现在我的类只是重新定义它们使用的方法。
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

您应该创建一个头文件,如

// Constants.hFOUNDATION_EXPORT NSString *const MyFirstConstant;FOUNDATION_EXPORT NSString *const MySecondConstant;//etc.

(你可以用extern而不是FOUNDATION_EXPORT如果您的代码不用于混合C/C+环境或其他平台)

可以将此文件包含在使用常量的每个文件中,也可以包含在项目的预编译头中。

在.m文件中定义这些常量,如下所示

// Constants.mNSString *const MyFirstConstant = @"FirstConstant";NSString *const MySecondConstant = @"SecondConstant";

应该将Constants.m添加到应用程序/框架的目标中,以便将其链接到最终产品。

使用字符串常量代替#defineD常量是可以使用指针比较来测试等式的(stringInstance == MyFirstConstant),它比字符串比较快得多([stringInstance isEqualToString:MyFirstConstant])


查看完整回答
反对 回复 2019-06-06
?
桃花长相依

TA贡献1860条经验 获得超8个赞

最简单的方法:

// Prefs.h#define PREFS_MY_CONSTANT @"prefs_my_constant"

更好的方法:

// Prefs.hextern NSString * const PREFS_MY_CONSTANT;// Prefs.mNSString * const PREFS_MY_CONSTANT = @"prefs_my_constant";

第二个优点是,更改常量的值并不会导致整个程序的重建。


查看完整回答
反对 回复 2019-06-06
?
GCT1015

TA贡献1827条经验 获得超4个赞

还有一件事要提。如果需要一个非全局常量,则应使用static关键词。

// In your *.m filestatic NSString * const kNSStringConst = @"const value";

因为static关键字时,此Const在文件之外不可见。


轻微更正@QuinnTaylor:静态变量在编译单元..通常,这是一个单一的.m文件(如本例所示),但如果在其他地方包含的标头中声明.m文件,它可能会咬死您,因为编译后会得到链接器错误。


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 518 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信