Ado*_*els 3 string global objective-c ios
我通过使用项目中几个地方的键字符串访问存储在NSUserDefaults中的对象.为了避免在输入键字符串时出错,我想在全局设置.可能吗 ??
[[NSUserDefaults standardUserDefaults] objectForKey:@"UD_GPS_LAST_UPDATE"];
Run Code Online (Sandbox Code Playgroud)
小智 6
有不同的方法可以做到这一点.两种常用方法是使用全局NSString常量或预处理器#define指令.
一种流行的方法是使用全局变量.您需要将其添加到某个文件中.它可以是现有文件或单独文件.@implementation如果存在,请确保它在部分之外.它可能看起来像这样:
NSString *const MyStringConstantIdentifier = @"UD_GPS_LAST_UPDATE";
Run Code Online (Sandbox Code Playgroud)
然后将带有该extern属性的相同标识符添加到头文件中,该文件包含在要使用字符串常量的所有源文件中.
extern NSString *const MyStringConstantIdentifier;
Run Code Online (Sandbox Code Playgroud)
现在MyStringConstantIdentifier将在所有使用它的地方引用相同的字符串.
[[NSUserDefaults standardUserDefaults] objectForKey:MyStringConstantIdentifier];
Run Code Online (Sandbox Code Playgroud)
另一种方法是#define在头文件中使用预处理程序指令.确保在要使用标识符的所有源文件中包含头文件.
#define MyStringConstantIdentifier @"UD_GPS_LAST_UPDATE"
Run Code Online (Sandbox Code Playgroud)
现在,当您包含该头文件时,MyStringConstantIdentifier它将作为写入的快捷方式@"UD_GPS_LAST_UPDATE".然而,这将使预处理器的负担比编译器更重要.使用全局变量的不同之处在于使用时
[[NSUserDefaults standardUserDefaults] objectForKey:MyStringConstantIdentifier];
Run Code Online (Sandbox Code Playgroud)
预处理器实际上将替换为MyStringConstantIdentifier,@"UD_GPS_LAST_UPDATE"以便编译器处理的代码如下所示:
[[NSUserDefaults standardUserDefaults] objectForKey:@"UD_GPS_LAST_UPDATE"];
Run Code Online (Sandbox Code Playgroud)
如果这可能是一个问题,那么代码的某些部分是否会移动到库中.因为预处理发生在(实际上只是在你看待它的方式之前)编译时间,所以替换将在使用它的所有地方用字符串替换常量.假设这是在库中定义的.每当在库中更改字符串时,任何使用它的应用程序都必须重新编译.
| 归档时间: |
|
| 查看次数: |
908 次 |
| 最近记录: |