NSMutableArray变空了?

时间:2012-09-05 09:31:17

标签: objective-c nsmutablearray

我注意到,即使我的代码工作得很好,也会发生奇怪的事情。

假设我有两个数组:passwordEnteredtempPasswordEntered

我收到新的passwordEntered后,我每次都这样做:

 tempPasswordEntered=[passwordEntered mutableCopy]; 

然后我清理:

 [passwordEntered  removeAllObjects];

然后,下次我再次这样做(对于新的passwordEntered):

 tempPasswordEntered=[passwordEntered mutableCopy]; 

所以tempPasswordEntered只有最后passwordEntered,而不是两者。 如果它第一次在阵列中有4个位置,第二次它仍然有4个位置, 所以我的问题是,复制REPLACE数组?它没有添加到它的最后位置addObject

另一件事:我应该使用retain吗?

2 个答案:

答案 0 :(得分:1)

tempPasswordEntered=[passwordEntered mutableCopy];是一个变量赋值,与其他赋值一样,它完全改变了变量的值。在这种情况下,tempPasswordEntered现在指向passwordEntered的副本,其中只有一个对象。所以是的,它确实替换了数组,就像任何其他任务一样。

如果您想将passwordEntered中的对象添加到tempPasswordEntered,请尝试[tempPasswordEntered addObjectsFromArray:passwordEntered]

听起来你想要的是mutableCopy,而不是retain,但我真的不知道你的要求是什么,所以我不能说更多。你可能应该使用ARC:)

答案 1 :(得分:0)

NSArray *retVal = [[NSArray alloc] initWithArray:fetchResults];
NSArray *retVal = [[NSArray alloc] initWithArray:[fetchResults copy]];
NSArray *retVal = [[NSArray alloc] initWithArray:[fetchResults retain]];

后两者是简单的泄漏。第一种是制作副本的方法,但retVal = [fetchResults copy];是制作副本的更好方法。

但是,当然,你根本不需要副本。那不是问题。接着说,唯一不会崩溃的是空结果集。

这表明两件事之一;您的结果集已损坏(不太可能)或您正在错误地访问结果集(可能)。