Я пишу приложение для iPhone, и я хочу создать синглтон NSCache.Подкласс NSCache - приложение Singleton
У меня возникли проблемы, вот код, который у меня есть:
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' может не реагировать на 'метод' для каждой из этих линий.
Возможно, я что-то совершенно не прав, знаю, как это сделать?
так что они разбиты на файлы .h и .m, я объединил их здесь, потому что я думал, что будет работать одинаково в любом случае - (?) Я не думаю, что когда-либо звоню [[MyAppCache alloc ] init]. Хорошее количество кода, в том числе copyWithZone приходит отсюда (внизу страницы): http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html –
Теперь я редактирую код, чтобы показать деление на файлы .h и .m –