我真的很困惑。我有一个类A,它带有一个返回共享缓存实例的类方法:
+ (NSCache *)itemCache {
static NSCache *itemCache;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
itemCache = [[NSCache alloc] init];
});
return itemCache;
}
我还有一个A类的子类。
每当我调用[A itemCache]
时,我都会得到一个缓存实例。每当我打电话给[B itemCache]
时,我都会得到一个不同的缓存实例。
静态变量对于调用该方法的特定类是否唯一?我认为它们在所有子类中共享。
编辑没关系,还有其他事情要发生。世界确实像我想象的那样工作。我有一个应用目标和一个测试目标。 A类被包括在两个目标中。 B类仅在应用目标中。
答案 0 :(得分:1)
此代码产生预期的行为:
#import <Foundation/Foundation.h>
@interface A : NSObject
+ (NSCache *)itemCache;
@end
@implementation A
+ (NSCache *)itemCache {
static NSCache *itemCache;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
itemCache = [[NSCache alloc] init];
});
return itemCache;
}
@end
@interface B : A
@end
@implementation B
@end
@interface C : A
@end
@implementation C
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSLog(@"%@ %@ %@", [A itemCache], [B itemCache], [C itemCache]);
}
return 0;
}
日志:
<NSCache: 0x1002000e0> <NSCache: 0x1002000e0> <NSCache: 0x1002000e0>
你的问题必须是别的 - 在哪里。