-(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改變其他任何地方。
一件事我打算做是增加一個塊的值在一些陣列和適當地去除那些塊。問題是,如果我知道塊,我怎麼知道塊代表什麼代碼?
它用於正常工作,現在它不。這迫使我堅持下去。
我能想到的唯一的辦法是,不知何故塊()未能完成但塊未完成,怎麼能出現這種情況?
如果我按暫停,所有的線程都是空的。
更新:將@synchronized()添加到++並解決問題。但是,它沒有任何意義。
應該還是工作,沒有@synchronized因爲mainQueue只有1最大線程並同時執行的事情之一。
沒有評論只是downvotes。這到底是什麼?是的,這是困難的問題。我嘗試了很多東西。我根本想不出爲什麼代碼會失敗的原因。這是一個非常簡單的代碼。 –