我试图在枚举时更改数组的内容。为了避免警告,“数组在枚举时被突变”我制作了一个数组的副本并像这样做了自动释放 -
int iKeyArrayCount=0;
for(NSString *keyEntity in [[keyArray copy]autorelease])
{
[keyArray replaceObjectAtIndex:iKeyArrayCount withObject:[keyEntity stringByReplacingOccurrencesOfString:@"\"" withString:kMPVTBlankString]];
[keyArray replaceObjectAtIndex:iKeyArrayCount withObject:[keyEntity stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
iKeyArrayCount++;
}
我的困惑在于关于keyArray副本的枚举。虽然枚举是这样的,但每次执行for循环时都会形成keyArray的副本?或者在整个枚举过程中只形成一个keyArray的副本。
答案 0 :(得分:2)
在该代码片段[[keyArray copy] autorelease]
仅执行一次,结果用于正在迭代的对象。
换句话说,“在整个枚举过程中只形成一个keyArray的副本”是正确的。
答案 1 :(得分:0)
为此复制整个数组是没有意义的。您也可以使用常规for循环而不是枚举:
for (NSInteger i = 0; i < [keyArray count]; i++)
{
NSString *keyEntity = [keyArray objectAtIndex:i];
NSString *newKeyEntity = [keyEntity stringByReplacingOccurrencesOfString:@"\\" withString:@" "];
newKeyEntity = [newKeyEntity stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[keyArray replaceObjectAtIndex:i withObject:newKeyEntity];
}
如果你开始在循环中添加/删除对象,事情可能会变脏,但只要你只是替换它们就可以了。
您可能已经注意到stringByReplacingOccurrencesOfString:withString:
在您的示例中没用,因为您再次在下一行中替换它。