覆盖NSObject数据

时间:2012-05-02 03:58:49

标签: iphone objective-c 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

的正确方法

请指导我锄头可以改变价值。

感谢您提前

3 个答案:

答案 0 :(得分: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"]; 
    

答案 1 :(得分:0)

您的代码应该与您展示的内容有关。只需要注意几点:

  1. 您需要myarray成为NSMutableArray
  2. 您在这里输入错误:relplaceObjectAtIndex:2它应该是replaceObjectAtIndex
  3. 数组从索引0开始,我相信你知道。

答案 2 :(得分:0)

首先使用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