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

我有一个包含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];
}

而现在我再也无法重现任何此类崩溃.我打赌[复制]更有效率,我宁愿使用它,但我无法弄清楚为什么它完全不稳定!

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

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

[operationQueue addOperation: operation];

我是,基本上通过使一堆事情变得更慢,抓住应用程序与2个线程运行2个线程为这样的队列初始化:

operationQueue.maxConcurrentOperationCount = 1;

我认为这是不可能的.线索是第二个线程在[NSAutoreleasePool drain]中,这让我得知NSOperationQueue可以随时随地做自动释放的东西.

解决方法

NSSet* collectiblecopy = [NSSet setWithSet:_collectibles]

为你工作?

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...