在《Beginning iPhone 4》一书中,作者使用此代码创建了一个类别,用于创建一个 NSDictionary 的深层副本,该副本具有一个 NSArray 名称,用于显示字母表中每个字母的名称,以显示带有搜索栏的索引表的示例。
#import "NSDictionary-MutableDeepCopy.h"
@implementation NSDictionary (MutableDeepCopy)
- (NSMutableDictionary *) mutableDeepCopy {
NSMutableDictionary *returnDict = [[NSMutableDictionary alloc] initWithCapacity:[self count]];
NSArray *keys = [self allKeys];
for (id key in keys) {
id oneValue = [self valueForKey:key];
id oneCopy = nil;
if ([oneValue respondsToSelector:@selector(mutableDeepCopy)]) oneCopy = [oneValue mutableDeepCopy];
else if ([oneValue respondsToSelector:@selector(mutableCopy)]) oneCopy = [oneValue mutableCopy];
if (oneCopy == nil)
oneCopy = [oneValue copy];
[returnDict setValue:oneCopy forKey:key];
[oneCopy release];
}
return returnDict;
}
@end
有人可以解释for循环逻辑吗?我不确定他在查看哪个值响应哪个选择器以及为什么将其添加到字典中要做什么。谢谢。