Если вы хотите создать кэш один раз и проверить его, я обычно использую метод +initialize
. Этот метод вызывается до первого сообщения, отправленного классу, поэтому кэш будет создан до того, как +function::
(что, кстати, является ужасным именем селектора) может быть вызвано. В этом случае я обычно объявляю переменную кэша в файле .m, но объявление ее в определении метода также может работать.
Редактировать: Добавление примера по запросу 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]
?) Вы должны убедиться, что понимаете поиск по словарю, прежде чем применять такую стратегию.