-(void)GrabbingProcess:(void (^)())block;
{
AssertNonMainThread;
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
if (self.OtherGrabbingIndicator == 0)
{
self.isStillLoading = true;
}
self.OtherGrabbingIndicator ++;
AssertMainThread
}];
block();
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[self updateStatusAtList];
self.OtherGrabbingIndicator --;
if (self.OtherGrabbingIndicator ==0)
{
self.isStillLoading = false;
}
AssertMainThread
}];
}
基本上,代码设置为 self.OtherGrabbingIndicator++ 将始终与 self.OtherGrabbingIndicator 平衡--
我想不出它会失败的任何原因。它不会失败。
现在,偶尔会失败。self.OtherGrabbingIndicator 将悬停在 2 或 1 并且所有线程都已停止。不知何故,一些++没有被--平衡。但怎么可能呢?
我不知道怎么做。
我检查了一下,没有办法 self.OtherGrabbingIndicator 在其他任何地方更改。
我打算做的一件事是在某个数组中添加一个块的值并适当地删除这些块。问题是如果我知道块,我怎么知道块代表什么代码?
以前可以正常工作,现在不行了。这让我抓狂。
我能想到的唯一方法是 block() 以某种方式无法完成,但哪个块无法完成,这怎么会发生?
如果我按暂停,所有线程都是空的。
更新:将 @synchronized() 添加到 ++ 和 -- 解决了问题。但是,这没有任何意义。
如果没有@synchronized,它仍然可以工作,因为 mainQueue 只有 1 个最大线程并且一次执行一个。