Если вы хотите создать кеш один раз и проверить его, я обычно использую метод +initialize
. Этот метод вызывается перед первым сообщением, отправленным в класс, поэтому кеш будет создан до +function::
(который, кстати, является ужасным именем селектора). В этом случае я обычно объявляю переменную кэша в файле .m, но объявление ее в определении метода также может работать.
Edit: Добавление пример по запросу OP:
// MyClass.m
static NSMutableDictionary* cache;
+ (void) initialize {
cache = [[NSMutableDictionary alloc] init];
}
+ (double) cachedValueForParam1:(id)param1 param2:(id)param2 {
// Test if (param1,param2) is in cache and return cached value.
}
Очевидно, что если значение не существует в кэше, вы должны иметь некоторый код, который добавляет значение. Кроме того, я понятия не имею, как вы собираетесь комбинировать param1
и param2
в качестве ключа для кеша, или как вы сохраните это значение. (Возможно, +[NSNumber numberWithDouble:]
и -[NSNumber doubleValue]
?) Перед реализацией такой стратегии вам нужно убедиться, что вы понимаете словарный поиск.
дублируют http://stackoverflow.com/questions/554969/using-static-keyword-in-objective-c-when-defining-a-cached-variable – joshperry