gpt4 book ai didi

objective-c - 奇怪的 NSSet 复制崩溃

转载 作者:太空狗 更新时间:2023-10-30 03:38:00 29 4
gpt4 key购买 nike

我有一个包含 NSSet 的类。该对象称为 _collectibles,在一个方法中,我制作了该集合的副本以进行一些处理,例如:

NSSet* collectibleCopy = [_collectibles copy];

在实践中,我看到这经常崩溃并显示以下消息:

[__NSPlaceholderSet initWithObjects:count:]: attempt to insert nil object from objects

我已经通过将上面的代码更改为:

解决了这个问题
NSMutableSet* collectibleCopy = [[NSMutableSet alloc] initWithCapacity: [_collectibles count]];
for ( id thing in _collectibles ) {
[collectibleCopy addObject: thing];
}

现在我无法再重现任何此类崩溃。我打赌 [copy] 效率更高,我宁愿使用它,但我不明白为什么它完全不稳定!

更新:虽然完整的上下文需要大量的解释,但我解决这个问题的关键是,a,代码是这样调用的:

NSBlockOperation* operation = [NSBlockOperation blockOperationWithBlock: ^{
[thing doStuff];
}];

[operationQueue addOperation: operation];

我基本上是通过让一堆东西变慢,用 2 个线程运行 2 个线程的应用程序来初始化一个队列:

operationQueue.maxConcurrentOperationCount = 1;

我认为这是不可能的。线索是第二个线程在 [NSAutoreleasePool drain] 中,这让我了解到 NSOperationQueue 可以随时随地执行自动释放操作。

最佳答案

NSSet* collectibleCopy = [NSSet setWithSet:_collectibles] 

为你工作?

关于objective-c - 奇怪的 NSSet 复制崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16736794/

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