From the `NSOperation` documentation:

>The exact execution context for your completion block is not guaranteed but is typically a secondary thread. [...] The completion block you provide is executed when the value returned by the isFinished method changes to YES.

So it seems like they do exactly what you're doing: KVO. In that case your behavior is exactly the same, I would just document it on the .h file so that people know what to expect from that completionBlock.