NSDictionary不会改变

Žel*_*ber 0 static object objective-c nsdictionary ios

我想让自己变得更容易,所以我创建了一个由其他函数使用的字典(按对象或对象按键到达键),但该字典始终是静态的.这是一个很好的方式,或者我需要财产或其他什么?

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

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

注意:键是在顶部声明的静态字符串,对象是带整数的NSNumbers.

Abi*_*ern 5

您可以在方法中创建静态,而不是将静态暴露给整个类,并使用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;
}
Run Code Online (Sandbox Code Playgroud)