
如何从上到下遍历整个层次结构,并将NSDictionarIEs和NSArrays的所有实例分别转换为NSMutableDictionarIEs和NSMutableArrays?
是否有任何简单的“递归制作可变副本”功能我不知道?如果没有,我只需要反复循环和打字检查吗?我可以随时更换,还是重建整个层次结构?
解决方法 以下方法创建嵌套数组,字典和集的嵌套(深层)可变副本.它还可用于在层次结构内创建非集合对象的可变副本,例如字符串.@interface NSObject (MyDeepcopy)-(ID)deepMutablecopy;@end@implementation NSObject (MyDeepcopy)-(ID)deepMutablecopy{ if ([self isKindOfClass:[NSArray class]]) { NSArray *oldArray = (NSArray *)self; NSMutableArray *newArray = [NSMutableArray array]; for (ID obj in oldArray) { [newArray addobject:[obj deepMutablecopy]]; } return newArray; } else if ([self isKindOfClass:[NSDictionary class]]) { NSDictionary *oldDict = (NSDictionary *)self; NSMutableDictionary *newDict = [NSMutableDictionary dictionary]; for (ID obj in oldDict) { [newDict setobject:[oldDict[obj] deepMutablecopy] forKey:obj]; } return newDict; } else if ([self isKindOfClass:[NSSet class]]) { NSSet *oldSet = (NSSet *)self; NSMutableSet *newSet = [NSMutableSet set]; for (ID obj in oldSet) { [newSet addobject:[obj deepMutablecopy]]; } return newSet;#if MAKE_MUtable_copIES_OF_NONColLECTION_OBJECTS } else if ([self conformstoprotocol:@protocol(NSMutablecopying)]) { // e.g. Nsstring return [self mutablecopy]; } else if ([self conformstoprotocol:@protocol(NScopying)]) { // e.g. NSNumber return [self copy];#endif } else { return self; }}@end 用它就好
NSDictionary *dict = ...;NSMutableDictionary *mdict = [dict deepMutablecopy];
(不复制字典键,只复制值).
我很确定我在SO上看过这样的东西,但现在找不到它.
总结以上是内存溢出为你收集整理的ios – 如何遍历NSDictionaries和NSArrays的嵌套层次结构并将所有转换为可变副本?全部内容,希望文章能够帮你解决ios – 如何遍历NSDictionaries和NSArrays的嵌套层次结构并将所有转换为可变副本?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)