0

NSLog(@"...") ステートメントを実行するとアプリがクラッシュし、コンソールのログにオブジェクトが二重に解放されたことが示されました。ゾンビインストゥルメントを使って確認したところ、myAreas の弦の 1 つがオーバーリリースされていることがわかりました。しかし、なぜそれが起こったのか理解できませんか?何か助けはありますか?ありがとうございました。

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);
4

1 に答える 1

0

NSMutableArrayはスレッドセーフではないため、別のスレッドで使用すると微妙なバグが発生する可能性がありますが、ドロップNSEnumerationConcurrentしても問題なく動作するはずです。

于 2013-01-31T05:23:45.583 に答える