0

我有一个数组,这个数组包含问题对象,所以在这里我需要更改数组的位置

Question *que=[[Question alloc]init];

que=[myarray objectAtIndex:1];

Question *que1=[[Question alloc]init];
que1=[myarray objectAtIndex:2];

here i need to inter change objects each other some 

[que1 setValue: que.name forKey:@"Name"];

[myarray relplaceObjectAtIndex:2 withObject:que1];

设置值相同的objectValues是否正确

请指导我锄头可以互换价值。

感谢提前

4

3 回答 3

1

您的代码存在重大问题:

  1. 这个说法:

    Question *que = [[Question alloc] init];
    

    分配一个新Question实例并将其分配给变量que。当你这样做时:

    que = [myarray objectAtIndex:1];
    

    您正在覆盖Question您刚刚分配的实例,从而有效地泄漏内存(因为您从未释放它)。如果您使用 ARC,这将不是问题,但仍然需要注意这一点,因为无论有没有 ARC,它都是没有意义的。你这样做了两次,一次一次,que一次que1。由于您实际上不需要分配和初始化新Question实例,因此您可以这样做:

    Question *que = [myarray objectAtIndex:1];
    
  2. 您获得对Question对象的引用并将其分配给que1. 然后你改变它并想把它放回数组中。这是没有意义的,因为该数组已经包含对Question您使用objectAtIndex:.

  3. 你还没有真正解释你想要做什么。您的整个代码基本上可以归结为:

    [[[myarray objectAtIndex:2] setValue:[[myarray objectAtIndex:1] name] forKey:@"Name"]; 
    
于 2012-05-02T04:24:40.353 回答
0

您的代码应该按照您所展示的方式工作。只需注意几点:

  1. 你需要myarray成为一个NSMutableArray
  2. 你这里有一个错字:relplaceObjectAtIndex:2应该是replaceObjectAtIndex
  3. 数组从索引 0 开始,我相信您知道这一点。
于 2012-05-02T04:08:49.467 回答
0

首先使用 NSMutableArray 对象来保存它而不是 NSArray

然后。

你需要了解一件主要的事情,你只持有一个指向对象的指针。array 正在管理它。您在访问数组内的对象之前创建了一个对象,不要这样做会造成内存泄漏。您必须仅从数组访问对象。

Question * que1=[myarray objectAtIndex:1];
[que1 retain];
[myarray removeObjectAtIndex:1];

Question * que2=[myarray objectAtIndex:2];
[que2 retain];
[myarray removeObjectAtIndex:2];

您可能没有使用 ARC,并且您的数组是该对象的唯一所有者。所以如果你从数组中删除对象,它可能会释放整个对象

[myarray insertObject:que2 atIndex:1];
[myarray insertObject:que1 atIndex:2];

这是将物体放在任何位置的示例。读取类引用NSMutableArray

于 2012-05-02T04:14:24.420 回答