DrW*_*urm 18 constants objective-c nsnumber ios
我想通过本主题中与NSStrings相同的样式制作一些NSNumber常量.也就是说,我正在创建单独的constants.h/.m文件并将它们导入需要访问它们的类中.
Chu*_*uck 18
这样做的麻烦在于没有编译时常量NSNumber这样的东西.只有NSString才能获得这种区别.NSNumbers始终是动态创建的.您可以使用在程序启动时运行的函数来伪造它以初始化变量.你的选择:
使用+load执行初始化的方法创建一个类.
在包含常量的文件中,包含一个函数__attribute__((constructor)).所以,例如:
// Constants.m
NSNumber *someGlobalNumber;
__attribute__((constructor))
static void InitGlobalNumber() {
    someGlobalNumber = [[NSNumber numberWithInteger:1] retain];
}
但是,当然,您无法在启动过程早期运行的任何其他功能中可靠地使用这些数字.这通常不是问题,但值得记住.
另一个选项,我已经看过几次,是有一个类的数字访问器,而不是给变量的原始访问.这是一个更重的设计,但它也感觉不那么巫术,它有它的魅力.
DHa*_*ick 16
遗憾的是,您目前无法NSNumber以与生成常量相同的方式生成NSString常量.当您尝试这样做时,您将收到编译器错误
NSNumber * const kNumberConstant = @2; // This doesn't work.
但是,您可以使用基元.
NSInteger const kSomeIntValue = 10;
您基本上可以在三个部分中达到您想要的效果:
.h文件:
extern NSNumber *MyFirstConstant;
.m文件
NSNumber *MyFirstConstant;
AppDelegate.m
+(void)initialize
{
    MyFirstConstant = @5;
    ...
}
AppDelegate保证在您的任何其他代码之前运行,并且初始化是在AppDelegate上调用的第一个方法,因此您可以基本上确保在应用程序运行之前为您设置所有常量.
| 归档时间: | 
 | 
| 查看次数: | 10785 次 | 
| 最近记录: |