我遇到了一种情况,我必须编写一个大量迭代的循环,并且在这个循环中NSData
,我有一个必须与键关联的对象。这导致我搜索一个简单的objective-c_KeyValuePair_
类,但找不到一个,所以我自己编写了一个。现在我很想知道仅使用NSMutableDictinoary
仅持有 1 个键和值是否有任何好处。在整个项目中都尝试了这两种方法后,我在 App UI 端或 Instruments Time Profiler 方面没有太大区别。
所以我的问题是:
- 单个 kvpair 类是否比
NSMutableDictionary
- 默认情况下是否
NSMutableDict
分配任何更大的空间然后这样做 - 实际上是否有一个我刚刚错过的标准单键值对类
一些代码:
for (int i = 0, count = [photoUrls count]; i < count; ++i) {
// Example usage of the kvp class
NSMutableDictionary *imageRequest = [[NSMutableDictionary alloc] init];
JHKeyValuePair *kvPair = [[JHKeyValuePair alloc] initWithKey:@"DAILY" andValue:[NSNumber numberWithInt:i];
[imageRequest setObject:self forKey:@"delegate"];
[imageRequest setObject:kvPair forKey:@"userInfo"];
[kvPair release];
[imageRequest setObject:[dailySpecialData objectForKey:@"IMAGE_URL"] forKey:@"url"];
[imageDownloader addDownloadRequestToQueue:imageRequest];
[imageRequest release];
}
JHKeyValuePair.h
@interface JHKeyValuePair : NSObject {
id key;
id value;
}
@property (nonatomic, retain) id key;
@property (nonatomic, retain) id value;
- (id)initWithKey:(id)aKey andValue:(id)aValue;
@end
JHKeyValuePair.m
#import "JHKeyValuePair.h"
@implementation JHKeyValuePair
@synthesize key;
@synthesize value;
- (id)initWithKey:(id)aKey andValue:(id)aValue {
if ((self = [super init])) {
key = [aKey retain];
value = [aValue retain];
}
return self;
}
- (void)dealloc {
[key release], key = nil;
[value release], value = nil;
[super dealloc];
}
- (id)copyWithZone:(NSZone *)zone {
JHKeyValuePair *copy = [[JHKeyValuePair allocWithZone:zone] init];
[copy setKey:self.key];
[copy setValue:self.value];
return copy;
}
- (BOOL)isEqual:(id)anObject {
BOOL ret;
if (self == anObject) {
ret = YES;
} else if (![anObject isKindOfClass:[JHKeyValuePair class]]) {
ret = NO;
} else {
ret = [key isEqual:((JHKeyValuePair *)anObject).key] && [value isEqual:((JHKeyValuePair *)anObject).value];
}
return ret;
}
@end
编辑以修复初始解释。似乎我在句子中间偏离了方向,再也没有回来完成它。