Iphone 为什么nslog语句中数组中的元素被过度释放

Iphone 为什么nslog语句中数组中的元素被过度释放,iphone,objective-c,nslog,Iphone,Objective C,Nslog,我的应用程序在运行到NSLog(@“…”)语句时崩溃,登录控制台显示一个对象被双重释放。我用僵尸工具检查它,发现myAreas中的一个字符串被过度释放。但我不明白为什么会这样?有什么帮助吗?多谢各位 NSString *myArea = @"Europe"; NSArray *myTimeZones = [NSTimeZone knownTimeZoneNames]; NSMutableArray *myAreas = [NSMutableArray arrayWithCapacity:1];

我的应用程序在运行到NSLog(@“…”)语句时崩溃,登录控制台显示一个对象被双重释放。我用僵尸工具检查它,发现myAreas中的一个字符串被过度释放。但我不明白为什么会这样?有什么帮助吗?多谢各位

NSString *myArea = @"Europe";
NSArray *myTimeZones = [NSTimeZone knownTimeZoneNames];
NSMutableArray *myAreas = [NSMutableArray arrayWithCapacity:1];
[myTimeZones enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    NSString *name = (NSString *)obj;
    if ([name hasPrefix:myArea]) {
        NSString *tmpArea = [name substringFromIndex:myArea.length+1];
        [myAreas addObject:tmpArea];
    }
}];
NSLog(@"My Cities in %@ time zone: %@", myArea, myAreas);

NSMutableArray
不是线程安全的,因此在不同线程中使用时可能会导致细微的错误,请删除
NSEnumerationConcurrent
,它应该可以正常工作。

谢谢。是的,当删除NSEnumerationConcurrent时,它可以正常工作。但当我使用NSEnumerationConcurrent | NSEnumerationReverse时,它也可以正常工作。您能解释一下吗?从文档中可以看到:“NSEnumerationReverse…其行为对于NSDictionary和NSSet类是未定义的,或者与NSEnumerationConcurrent标志组合使用时。”显然,这种组合使块在单个线程中运行,您可以使用xcode调试器轻松确认