首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类NSCache -

子类NSCache -
EN

Stack Overflow用户
提问于 2010-08-17 23:55:03
回答 2查看 1.7K关注 0票数 0

我正在编写一个iPhone应用程序,我想创建一个NSCache单例程序。

我遇到了麻烦,下面是我的代码:

MyAppCache.h:

代码语言:javascript
复制
#import <Foundation/Foundation.h>

@interface MyAppCache : NSCache {}

+ (MyAppCache *) sharedCache;

@end

MyAppCache.m:

代码语言:javascript
复制
#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

当我想要添加一些东西或者从缓存中得到一些东西时,我可能会写:

代码语言:javascript
复制
#import "MyAppCache.h"

MyAppCache *theCache = [MyAppCache sharedCache];  

然后:

代码语言:javascript
复制
NSData *someData = [[theCache objectForKey: keyString] retain];

或者:

代码语言:javascript
复制
[theCache setObject: someData forKey: keyString cost: sizeof(someData)];

问题是:编译器抱怨'MyAppCache‘可能不会对每一行的“方法”做出响应。

我可能做错了什么-知道怎么做吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-18 04:42:13

好的,明白了。我有一个MyAppCache.h和MyAppCache.m文件的副本(以前的版本),它们仍然位于项目中的一个文件夹中!

票数 -2
EN

Stack Overflow用户

发布于 2010-08-18 00:43:12

如果第一个清单是MyAppCache.h,那么将@implementation插入到头文件中,这不太可能做正确的事情(链接器可能会抱怨)。

如果第一个清单是MyAppCache.m,则需要将@接口移动到MyAppCache.h。

还请注意,您的代码受到双重输入的影响:[[MyAppCache alloc] init]实际上是[[[MyAppCache sharedCache] retain] init]。我不知道当输入两次时NSCache会做什么,但可能不是很好。我真的不想实现copyWithZone:(我很确定对象在默认情况下是不可复制的),而且您只需重写allocWithZone:来引发异常。

(并且+sharedCache不是线程安全的,这可能是一个问题,也可能不是一个问题。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3507900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档