反復の場合、かなりの量のループを作成する必要がある状況になりました。このループにはNSData
、キーに関連付ける必要のあるオブジェクトがありました。これにより、単純なObjective-c_KeyValuePair_
クラスを検索することになりましたが、見つからなかったため、自分で作成しました。NSMutableDictinoary
ここで、キーと値を1つだけ保持するだけでメリットがあるかどうかを知りたいと思います。プロジェクト全体で両方を試した後、AppUI側とInstrumentsTimeProfilerで大きな違いはわかりません。
だから私の質問は:
- 単一の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
編集して最初の説明を修正します。私は文の途中で脇道に追いやられて、それを終えるために二度と戻ってこなかったようです。