Ž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.
您可以在方法中创建静态,而不是将静态暴露给整个类,并使用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)