Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c obj-c中的集合引用_Objective C_Ios4 - Fatal编程技术网

Objective 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

我是Obj-C的新手,这里有点小问题

我正在尝试将临时字典中的值插入数组

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:如果你能在一次调用中构造字典,那么你应该。