There are two types of NSOperation s, simultaneous and non-competitive.
Noncompetitive operations are implemented in their -main method, and when this method returns, the operation is considered completed. If you create a thread inside -main and want the operation to be executed until the thread completes, you must block the execution in -main until the thread is executed (for example, using a semaphore).
Parallel operations have a set of predicates like -isExecuting and -isFinished , and the a -start method starts the operation. This method can simply call some background processing and return immediately, the whole operation is not considered complete until -isFinished reports it.
Now that we have a GCD, it is generally recommended that blocks and send queues be considered as an easier alternative to NSOperation , also see the –addOperationWithBlock: method on NSOperationQueue .
source share