以下分配类型之间的区别?

时间:2011-03-21 06:33:40

标签: iphone objective-c

我有一个简单的代码:

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,对后者有什么影响?

2 个答案:

答案 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。 (它应该,因为你正在创建一个不可变的字典,但数组中的那个是可变的。)第二个只获得对数组中字典的引用 - 没有机会创建一个新对象。