Objective-c静态NSArray初始化器

我有这个代码(较大部分的小块 – 只是这里显示的麻烦部分):
#define kSizeLarge @"large"

-(void)determineBestFileSizeWithLimit:(int)limit
{
    static Nsstring *largeName = kSizeLarge;
    static NSArray *nameArray = @[kSizeLarge];
    ...
}

编译器喜欢第一个静态变量而讨厌第二个静态变量

Initializer element is not a compile-time constant

从第二行删除静态使编译器感到高兴.

我做错了什么/不正确?

解决方法

当静态变量的初始化程序不是编译时常量时,您需要使用另一种初始化机制,例如dispatch_once:
-(void)determineBestFileSizeWithLimit:(int)limit {
    static Nsstring *largeName = kSizeLarge;
    static NSArray *nameArray = nil;
    static dispatch_once_t oncetoken;
    dispatch_once(&oncetoken,^{
        nameArray = @[kSizeLarge];
    });
}

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...