gpt4 book ai didi

ios - 枚举对象并将其添加到 NSMutableSet 时的 exc_bad_access

转载 作者:行者123 更新时间:2023-11-29 10:42:45 26 4
gpt4 key购买 nike

当对象被添加到 NSMutableSet 时,我不时收到以下异常:

Thread 6: EXC_BAD_ACCESS (code=1, address=0x0)

它出现在以下代码块中:

- (NSSet *)project:(NSSet *)set
{
NSMutableSet *collection = [NSMutableSet set];
NSArray *keys = @[@"proximityUUID", @"major", @"minor"];

[set enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(ESTBeacon *beacon, BOOL *stop) {
[collection addObject:[beacon dictionaryWithValuesForKeys:keys]];
}];

return [self alter:collection];
}

更准确地说:[collection addObject:[beacon dictionaryWithValuesForKeys:keys]];

我知道这是内存问题,但我不确定是什么原因。可能是导致异常的选项 NSEnumerationConcurrent 吗?或者它还能是什么?

另外,我应该使用其他枚举方法吗?

注意:以上代码在dispatch_async 方法中运行,如果有任何帮助的话

最佳答案

在进行其他读取或写入操作时,各种集合类都不是线程安全的。您创建了一个并发枚举,这意味着您最终要对 NSMutableSet 上的 addObject: 进行多线程调用。这会导致崩溃。

将您的枚举更改为串行而不是并发。

[set enumerateObjectsWithOptions:0 usingBlock:^(ESTBeacon *beacon, BOOL *stop) {
[collection addObject:[beacon dictionaryWithValuesForKeys:keys]];
}];

关于ios - 枚举对象并将其添加到 NSMutableSet 时的 exc_bad_access,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23702365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com