Using much faster and efficient OSAtomicCompareAndSwap instead of @synchronize)
--> We now avoid locking the whole object with @synchronize each time, because locking the array each time with @synchronize was slowing down the unit tests a lot — making the timeout expire due to that extra time used for locking
Better Failure Locations (actually shows error on the expectationWithDescription & waitForExpectationsWithTimeout lines :-))