我正在使用项目中多个位置的键字符串访问存储在 NSUserDefaults 中的对象。为避免在键入密钥字符串时出现错误,我想在全局中设置。可能吗 ??
[[NSUserDefaults standardUserDefaults] objectForKey:@"UD_GPS_LAST_UPDATE"];
我正在使用项目中多个位置的键字符串访问存储在 NSUserDefaults 中的对象。为避免在键入密钥字符串时出现错误,我想在全局中设置。可能吗 ??
[[NSUserDefaults standardUserDefaults] objectForKey:@"UD_GPS_LAST_UPDATE"];
有不同的方法可以做到这一点。两种常用方法是使用全局NSString
常量或预处理器#define
指令。
一种流行的方法是使用全局变量。您需要将其添加到某个文件中。它可以是现有文件或单独的文件。@implementation
如果它存在,请确保它在该部分之外。它可能看起来像这样:
NSString *const MyStringConstantIdentifier = @"UD_GPS_LAST_UPDATE";
然后将具有属性的相同标识符添加extern
到头文件中,该头文件包含在要使用字符串常量的所有源文件中。
extern NSString *const MyStringConstantIdentifier;
现在MyStringConstantIdentifier
将在所有使用它的地方引用相同的字符串。
[[NSUserDefaults standardUserDefaults] objectForKey:MyStringConstantIdentifier];
#define
另一种方法是在头文件中使用预处理器指令。确保将头文件包含在要使用标识符的所有源文件中。
#define MyStringConstantIdentifier @"UD_GPS_LAST_UPDATE"
现在,当您包含该头文件时,MyStringConstantIdentifier
它将作为编写@"UD_GPS_LAST_UPDATE"
. 然而,这会给预处理器带来负担,而不是编译器。与使用全局变量的区别在于,当您使用
[[NSUserDefaults standardUserDefaults] objectForKey:MyStringConstantIdentifier];
预处理器实际上将替换MyStringConstantIdentifier
为,@"UD_GPS_LAST_UPDATE"
以便编译器处理的代码如下所示:
[[NSUserDefaults standardUserDefaults] objectForKey:@"UD_GPS_LAST_UPDATE"];
如果您的部分代码曾经移动到库中,这可能会成为问题。因为预处理发生在(实际上就在之前取决于你如何看待它)编译时,替换将在所有使用它的地方用字符串替换常量。假设这是在库中定义的。每当库中的字符串发生更改时,任何使用它的应用程序都必须重新编译。
对的,这是可能的。
事实上,这是使用所有常量字符串的最佳方式。
GlobalConstantsAndKeys.h
您可以使用以下和其他人创建文件
#define kUDGpsLastUpdate @"UD_GPS_LAST_UPDATE"
然后在整个项目中使用它。
[[NSUserDefaults standardUserDefaults] objectForKey:kUDGpsLastUpdate];
是的,创建example.h文件并写入#define SEND_MESSAGE_ID @"2"
或您想要的任何内容,然后转到 .pch 文件并导入example.h以在所有应用程序中查看它。