假设我有一个类似的类方法
+ (double)function:(id)param1 :(id)param2
{
// I want to memoize this like...
static NSMutableDictionary* cache = nil;
//
// test if (param1,param2) is in cache and return cached value, etc. etc
//
}
谢谢!!
最佳答案
如果你想创建一次缓存并检查它,我通常使用 +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]
?)在实现这样的策略之前,您需要确保了解字典查找。
关于c++ - 静态 Objective-C 类中的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2045735/