我想让自己变得更容易,所以我创建了一个由其他函数使用的字典(按对象或对象按键访问键),但该字典始终是静态的。这是一个很好的方式,或者我需要财产或其他什么?
+ (NSDictionary *)dictionaryWithCategoriesAndStrings
{
return @{
kNewsCategoryAll : @(NewsCategoryAll),
kNewsCategoryRadio : @(NewsCategoryRadio),
kNewsCategoryEconomics : @(NewsCategoryEconomics),
kNewsCategoryCulture : @(NewsCategoryCulture),
kNewsCategorySport : @(NewsCategorySport),
kNewsCategoryTravel : @(NewsCategoryTravel),
kNewsCategoryMusic : @(NewsCategoryMusic),
kNewsCategorySociety : @(NewsCategorySociety),
kNewsCategoryHealth : @(NewsCategoryHealth)
};
}
所以现在我总是通过函数[self dictionaryWithCategoriesAndString]访问这个相同的字典;
注意:键是在顶部声明的静态字符串,对象是带整数的NSNumbers。
答案 0 :(得分: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;
}
答案 1 :(得分:1)
每次调用此方法时,您都将创建一个新的NSDictionary,因此您不会真正访问相同的字典,因为每次只会是一个新的相同字典。如果您静态使用它,您将无法创建属性。也许更像这样的东西,所以你每次都要访问同一个字典。
要在实例方法中访问它,可以使用[[self class] dictionaryWithCategoriesAndStrings]。
static NSDictionary* dict;
+ (NSDictionary *)dictionaryWithCategoriesAndStrings
{
if(dict == nil)
{
dict = @{
kNewsCategoryAll : @(NewsCategoryAll),
kNewsCategoryRadio : @(NewsCategoryRadio),
kNewsCategoryEconomics : @(NewsCategoryEconomics),
kNewsCategoryCulture : @(NewsCategoryCulture),
kNewsCategorySport : @(NewsCategorySport),
kNewsCategoryTravel : @(NewsCategoryTravel),
kNewsCategoryMusic : @(NewsCategoryMusic),
kNewsCategorySociety : @(NewsCategorySociety),
kNewsCategoryHealth : @(NewsCategoryHealth)
};
}
return dict;
}
答案 2 :(得分:-1)
几乎是正确的。每次执行该选择器时,都会创建一个新的NSDictionary。那很不好。它应该只创建一次,它应该只是懒惰地创建。
@property (strong, nonatomic) NSDictionary *categoryDict;
- (NSDictionary *) categoryDict
{
if( !_categoryDict)
{
_categoryDict = @{ @"Key" :@"value" , ....};
}
return _categoryDict;
}
现在字典只创建一次。你可以用点符号来到词典。