1

我注意到,即使我的代码运行良好,也会发生一些奇怪的事情。

假设我有两个数组:passwordEnteredtempPasswordEntered.

在我得到一个新的之后passwordEntered,我每次都这样做:

 tempPasswordEntered=[passwordEntered mutableCopy]; 

然后我清理:

 [passwordEntered  removeAllObjects];

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

 tempPasswordEntered=[passwordEntered mutableCopy]; 

所以tempPasswordEntered只有最后一个passwordEntered,而不是两者。如果第一次它在数组中有 4 个位置,第二次它仍然有 4 个位置,所以我的问题是,副本会替换数组吗?它没有像你一样添加到它的最后一个位置addObject吗?

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

4

2 回答 2

1

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

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

听起来你想要的是mutableCopy,不是retain,但我真的不知道你的要求到底是什么,所以我不能多说。无论如何,您可能应该使用 ARC :)

于 2012-09-05T09:38:48.313 回答
0
NSArray *retVal = [[NSArray alloc] initWithArray:fetchResults];
NSArray *retVal = [[NSArray alloc] initWithArray:[fetchResults copy]];
NSArray *retVal = [[NSArray alloc] initWithArray:[fetchResults retain]];

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

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

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

于 2012-09-05T09:57:55.247 回答