重写NSObject的数据

问题描述:

我有一个数组这个数组包含所以在这里问的对象,我需要改变阵列重写NSObject的数据

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

请指引我锄正道可以改变价值。

感谢提前

+0

这难道不是出于某种原因? – CodaFi

没有与您的代码在这里显著的问题:

  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。然后你改变它,并想把它放回这个数组中。这是毫无意义的,因为数组已经持有对objectAtIndex:获得的同一个Question实例的引用。

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

    [[[myarray objectAtIndex:2] setValue:[[myarray objectAtIndex:1] name] forKey:@"Name"]; 
    

您的代码应该工作,你如何与你有什么表示打算。就在几个点要注意的:

  1. 你需要myarray是一个NSMutableArray
  2. 您在这里有一个错字:relplaceObjectAtIndex:2应该replaceObjectAtIndex
  3. 在数组索引0开始,我敢肯定你知道的。
+0

感谢您的回应myarray包含NSMutable数组,但我需要交换对象是否有可能? –

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

然后。

你需要理解一个主要的东西,你只持有一个指向对象的指针。数组正在管理它。在访问数组中的对象之前,你已经创建了一个对象,不要这样做会造成内存泄漏。您只能从数组访问对象。

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