我有一个简单的代码:
NSMutableArray *arrayCheckList = [[NSMutableArray alloc] init];
[arrayCheckList addObject:[NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"2011-03-14 10:25:59 +0000",@"Exercise at least 30mins/day",@"1",nil] forKeys:[NSArray arrayWithObjects:@"date",@"checkListData",@"status",nil]] ];
[arrayCheckList addObject:[NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"2011-03-14 10:25:59 +0000",@"Take regular insulin shots",@"1",nil] forKeys:[NSArray arrayWithObjects:@"date",@"checkListData",@"status",nil]]];
现在我想将一个上面数组的特定索引添加到字典中。以下是两种方式,哪种更好,为什么?后者的具体缺点是什么?
NSDictionary *tempDict = [[NSDictionary alloc] initWithDictionary:[arrayCheckList objectAtIndex:1]];
OR
NSDictionary *tempDict = [arrayCheckList objectAtIndex:1];
由于我没有在其中执行任何alloc / init,对后者有什么影响?
答案 0 :(得分:1)
1:
NSDictionary *tempDict = [[NSDictionary alloc] initWithDictionary:[arrayCheckList objectAtIndex:1]];
创建一个新的不可变字典对象作为原始字典对象的副本。如果您将对象添加到arrayCheckList
中的可变字典中,则不会将其添加到复制的参考中。
2:
NSDictionary *tempDict = [arrayCheckList objectAtIndex:1];
这会直接从您的数组中提取可变字典而不是副本。以下两行是等效的:
[[arrayCheckList objectAtIndex:1] addObject:something];
[tempDict addObject:something];
答案 1 :(得分:0)
第一个可能会将字典复制到数组的索引1。 (它应该,因为你正在创建一个不可变的字典,但数组中的那个是可变的。)第二个只获得对数组中字典的引用 - 没有机会创建一个新对象。