ios - 不会改变的 NSDictionary

标签 ios objective-c object static nsdictionary

我想让自己的事情变得更容易,所以我正在创建一个字典,供其他函数使用(按对象或按键访问对象),但该字典始终是静态的。这是做这件事的好方法还是我需要属性(property)或其他东西?

+ (NSDictionary *)dictionaryWithCategoriesAndStrings
{
    return @{
             kNewsCategoryAll       : @(NewsCategoryAll),
             kNewsCategoryRadio     : @(NewsCategoryRadio),
             kNewsCategoryEconomics : @(NewsCategoryEconomics),
             kNewsCategoryCulture   : @(NewsCategoryCulture),
             kNewsCategorySport     : @(NewsCategorySport),
             kNewsCategoryTravel    : @(NewsCategoryTravel),
             kNewsCategoryMusic     : @(NewsCategoryMusic),
             kNewsCategorySociety   : @(NewsCategorySociety),
             kNewsCategoryHealth    : @(NewsCategoryHealth)
             };
}

所以现在我总是通过函数 [self dictionaryWithCategoriesAndString] 访问同一个字典;

注意:这些键是在顶部声明的静态字符串,对象是带整数的 NSNumber。

最佳答案

与其将静态暴露给整个类,不如在方法中创建它,并使用 gcd 仅初始化一次:

线程安全的。

+ (NSDictionary *)dictionaryWithCategoriesAndStrings {
    static NSDictionary *dict;

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        dict = @{
                 kNewsCategoryAll       : @(NewsCategoryAll),
                 kNewsCategoryRadio     : @(NewsCategoryRadio),
                 kNewsCategoryEconomics : @(NewsCategoryEconomics),
                 kNewsCategoryCulture   : @(NewsCategoryCulture),
                 kNewsCategorySport     : @(NewsCategorySport),
                 kNewsCategoryTravel    : @(NewsCategoryTravel),
                 kNewsCategoryMusic     : @(NewsCategoryMusic),
                 kNewsCategorySociety   : @(NewsCategorySociety),
                 kNewsCategoryHealth    : @(NewsCategoryHealth)
                 };
    });

    return dict;
}

关于ios - 不会改变的 NSDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23890898/

相关文章:

iphone - UIImageView 延迟或恢复到不同的帧

iphone - 使用 CGPathRelease 释放路径导致 BAD_ACCESS

vb.net - 如何在 Visual Basic 中使用 set 和 get 方法?

ios - Xcode Swift CocoaPods pod spec lint 在 Embed Pods 框架上失败

Android HDPI 大小等于 iOS Retina 大小

ios - 错误 "Application windows are expected to have a root view controller"(iOS)

ios - 如何在 Storyboard上的 Size Inspector 中更改 UITableViewCell 的原始值?

iphone - 具有自定义高度的自定义 UINavigationBar 导致 UIBarButtonItem 的定位错误

javascript - 按一次迭代后停止的日期值对 JSON 数组进行排序

javascript - 如何修复此 javascript foreach 错误?