@synchronized(self.runningOperations) { line 1
[self.runningOperations addObject:operation]; line 2
}
当我调试这些代码时。首先它运行第1行,然后转到第2行。没关系,但在此之后,它再次转到第1行,然后转到第2行,然后跳出@synchronized。 但是当我打印runningOperations时,第一次运行第2行代码时,Object不会添加到self.runningOperations中,它会在第二次添加。 为什么它会运行两次,以及为什么Object会在第二次添加到self.runningOperations中?
答案 0 :(得分:2)
巧合的是,我刚刚调试了一些碰巧有@synchronised
的代码。
我也观察到调试器遵循line1,line2的模式,“跳回”到line1然后正常开启,就像我走过一样。我没有发现这是不寻常的,但是我看到调试器做了更多不寻常的事情。
我最好的猜测是该程序可能处于较低级别
我最好的建议是 不要将调试器的输出视为福音 。如果你在发布它几乎可以肯定是错误的,甚至在Debug中,我已经看到在不寻常的命令中突出显示步骤,我不能说为什么肯定,可能只是查看代码和编译代码之间的差异。
答案 1 :(得分:0)
如果self.runningOperation
始终为nil
,则无法用于同步。确保在调用@synchronized()
之前已初始化它。