Objective c obj-c中的集合引用
我是Obj-C的新手,这里有点小问题 我正在尝试将临时字典中的值插入数组Objective c obj-c中的集合引用,objective-c,ios4,Objective C,Ios4,我是Obj-C的新手,这里有点小问题 我正在尝试将临时字典中的值插入数组 NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init]; NSMutableArray *myArray = [[NSMutableArray alloc] init]; [myDict setObject:[NSNumber numberWithInt:100] forKey:@"Record"]; [myDict setObject:@"www
NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];
NSMutableArray *myArray = [[NSMutableArray alloc] init];
[myDict setObject:[NSNumber numberWithInt:100] forKey:@"Record"];
[myDict setObject:@"www" forKey:@"Name"];
[myArray addObject:myDict];
[myDict setObject:[NSNumber numberWithInt:80] forKey:@"Record"];
[myDict setObject:@"eee" forKey:@"Name"];
[myArray addObject:myDict];
[myDict setObject:[NSNumber numberWithInt:70] forKey:@"Record"];
[myDict setObject:@"rrr" forKey:@"Name"];
[myArray addObject:myDict];
[myDict setObject:[NSNumber numberWithInt:0] forKey:@"Record"];
[myDict setObject:@"ttt" forKey:@"Name"];
[myArray addObject:myDict];
NSLog(@"myArray %@",myArray);
不管这里的实现代码有多糟糕(我的英语也很糟糕:p),我想弄清楚的是,每次插入myArray
后,我如何清理myDict
使用[myDict removeAllObjects]每次addObject
之后,code>都会在末尾给我一个空数组
谢谢
感谢您对[myArray addObject:[[myDict copy]autorelease]]的所有回答代码>代码工作正常。我认为在将字典添加到数组之前,需要先复制字典
[myArray addObject:[[myDict copy] autorelease]];
然后您可以正常使用[myDict removeAllObjects]
。我认为您需要在将字典添加到数组之前复制它
[myArray addObject:[[myDict copy] autorelease]];
然后您可以正常使用[myDict removeAllObjects]
。这里的问题是您要反复向数组添加完全相同的可变字典。因此,数组只是对完全相同对象的引用的集合。因此,数组中的每个对象都与上一个对象相同,这并不奇怪
为了做你想做的事,你有两个选择。第一种方法是每次复制可变字典,并将该副本添加到数组中。您可以使用
[myArray addObject:[[myDict copy] autorelease]];
另一个解决方案是首先使用单独的词典。您可以构建一个全新的NSDictionary,而不是每次都对可变字典进行变异:
[myArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:100], @"Record",
@"www", @"Name",
nil]];
[myArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:80], @"Record",
@"eee", @"Name",
nil]];
这里的问题是,您要一次又一次地将完全相同的可变字典添加到数组中。因此,数组只是对完全相同对象的引用的集合。因此,数组中的每个对象都与上一个对象相同,这并不奇怪
为了做你想做的事,你有两个选择。第一种方法是每次复制可变字典,并将该副本添加到数组中。您可以使用
[myArray addObject:[[myDict copy] autorelease]];
另一个解决方案是首先使用单独的词典。您可以构建一个全新的NSDictionary,而不是每次都对可变字典进行变异:
[myArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:100], @"Record",
@"www", @"Name",
nil]];
[myArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:80], @"Record",
@"eee", @"Name",
nil]];
NSMutableDictionary*
建议的是指向dictionary对象的指针。
因此,当您将它添加到数组中时,它仍然是相同的对象-由myDict
以及数组中的元素指向。
因此,我建议您在每次添加后创建新词典:
NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];
NSMutableArray *myArray = [[NSMutableArray alloc] init];
[myDict setObject:[NSNumber numberWithInt:100] forKey:@"Record"];
[myDict setObject:@"www" forKey:@"Name"];
[myArray addObject:myDict];
myDict = [[NSMutableDictionary alloc] init];
[myDict setObject:[NSNumber numberWithInt:80] forKey:@"Record"];
[myDict setObject:@"eee" forKey:@"Name"];
[myArray addObject:myDict];
我假设您在上面的代码中使用了ARC
不过,更客观的方法是:
[myArray addObject: [NSDictionary dictionaryForObjectsAndKeys: [NSNumber numberWithInt:80], @"Record", @"www", @"Name"]];
NSMutableDictionary*
建议的是指向dictionary对象的指针。
因此,当您将它添加到数组中时,它仍然是相同的对象-由myDict
以及数组中的元素指向。
因此,我建议您在每次添加后创建新词典:
NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];
NSMutableArray *myArray = [[NSMutableArray alloc] init];
[myDict setObject:[NSNumber numberWithInt:100] forKey:@"Record"];
[myDict setObject:@"www" forKey:@"Name"];
[myArray addObject:myDict];
myDict = [[NSMutableDictionary alloc] init];
[myDict setObject:[NSNumber numberWithInt:80] forKey:@"Record"];
[myDict setObject:@"eee" forKey:@"Name"];
[myArray addObject:myDict];
我假设您在上面的代码中使用了ARC
不过,更客观的方法是:
[myArray addObject: [NSDictionary dictionaryForObjectsAndKeys: [NSNumber numberWithInt:80], @"Record", @"www", @"Name"]];
谢谢你的回答,在这里,什么样的答案会是更好的绩效评估方法?或者因为它的低级代码(我的意思是不在屏幕上画任何东西等)的性能不应该是一个问题。@Ivan:如果你能在一次调用中构造字典,那么你应该。谢谢你的回答,在性能方面,什么答案会是更好的方法?或者因为它的低级代码(我的意思是不在屏幕上绘制任何东西等),性能不应该是一个问题。@Ivan:如果你能在一次调用中构造字典,那么你应该。