我注意到,即使我的代码工作得很好,也会发生奇怪的事情。
假设我有两个数组:passwordEntered
和tempPasswordEntered
。
我收到新的passwordEntered
后,我每次都这样做:
tempPasswordEntered=[passwordEntered mutableCopy];
然后我清理:
[passwordEntered removeAllObjects];
然后,下次我再次这样做(对于新的passwordEntered
):
tempPasswordEntered=[passwordEntered mutableCopy];
所以tempPasswordEntered
只有最后passwordEntered
,而不是两者。
如果它第一次在阵列中有4个位置,第二次它仍然有4个位置,
所以我的问题是,复制REPLACE数组?它没有添加到它的最后位置addObject
?
另一件事:我应该使用retain
吗?
答案 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];是制作副本的更好方法。
但是,当然,你根本不需要副本。那不是问题。接着说,唯一不会崩溃的是空结果集。
这表明两件事之一;您的结果集已损坏(不太可能)或您正在错误地访问结果集(可能)。