在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循環邏輯嗎?我不確定他在查看哪個值響應哪個選擇器時會做什麼,以及爲什麼它會被添加到字典中。謝謝。