Я пишу приложение для iPhone и хочу создать синглтон NSCache.
У меня проблема, вот мой код:
MyAppCache.h:
#import <Foundation/Foundation.h>
@interface MyAppCache : NSCache {}
+ (MyAppCache *) sharedCache;
@end
MyAppCache.m:
#import "SpotmoCache.h"
static MyAppCache *sharedMyAppCache = nil;
@implementation MyAppCache
+ (MyAppCache *) sharedCache {
if (sharedMyAppCache == nil) {
sharedMyAppCache = [[super allocWithZone:NULL] init];
}
return sharedMyAppCache;
}
+ (id)allocWithZone:(NSZone *)zone {
return [[self sharedCache] retain];
}
- (id)copyWithZone:(NSZone *)zone {
return self;
}
- (id)retain {
return self;
}
- (NSUInteger)retainCount {
return NSUIntegerMax; //denotes an object that cannot be released
}
- (void)release{
//do nothing
}
- (id)autorelease {
return self;
}
@end
Когда я хочу что-то добавить или получить что-то из кэша, я могу написать:
#import "MyAppCache.h"
MyAppCache *theCache = [MyAppCache sharedCache];
Затем:
NSData *someData = [[theCache objectForKey: keyString] retain];
Или:
[theCache setObject: someData forKey: keyString cost: sizeof(someData)];
Проблема: компилятор жалуется «MyAppCache» может не отвечать на «метод» для каждой из этих строк.
Iможет быть, здесь что-то совершенно не так - знаете, как заставить это работать?