Objective c 添加到enumerateObjectWithBlock内的集合(可变NSArray/NSDictionary)安全吗?

Objective c 添加到enumerateObjectWithBlock内的集合(可变NSArray/NSDictionary)安全吗?,objective-c,multithreading,thread-safety,objective-c-blocks,foundation,Objective C,Multithreading,Thread Safety,Objective C Blocks,Foundation,执行此代码安全吗?也就是说,同时添加到NSMutableArray或NSMutableDictionary是否安全 - (NSArray *)batchProcess:(NSArray *)inputList { NSMutableArray *outputList = [NSMutableArray arrayWithCapacity:inputList.count]; [inputList enumerateObjectsWithOptions:NSEnumerationC

执行此代码安全吗?也就是说,同时添加到NSMutableArray或NSMutableDictionary是否安全

- (NSArray *)batchProcess:(NSArray *)inputList {
    NSMutableArray *outputList = [NSMutableArray arrayWithCapacity:inputList.count];

    [inputList enumerateObjectsWithOptions:NSEnumerationConcurrent 
               usingBlock:^(id thing, NSUInteger index, BOOL *stop){
        id processedThing = [self doProcessingOn:thing];

        [outputList addObject:processedThing];
    }];

    return outputList;
}
同时添加到NSMutableArray或NSMutableDictionary是否安全

- (NSArray *)batchProcess:(NSArray *)inputList {
    NSMutableArray *outputList = [NSMutableArray arrayWithCapacity:inputList.count];

    [inputList enumerateObjectsWithOptions:NSEnumerationConcurrent 
               usingBlock:^(id thing, NSUInteger index, BOOL *stop){
        id processedThing = [self doProcessingOn:thing];

        [outputList addObject:processedThing];
    }];

    return outputList;
}
除非您提供自己的同步机制,保证在任何给定时间只有一个线程使用它,它是不安全的。如果您以非线程安全的方式使用它,则应该预期未定义的行为