I have added a shorter answer now, leaving this for now, as that was part of the discussion ...
Well, I was pleased with my use of the isConcurrent method to this day!
I read the sentence:
In OS X v10.6 and later, operational queues ignore the value returned by this method and always run operations in a separate thread.
As a warning related to QA1712, indicating that for parallel operations, the start method can now be called on another thread for the one that queued the operation, which is a change in 10.6 and iOS 4.
I did not read this as an indication that the isConcurrent method isConcurrent completely ignored in the queue and has no purpose whatsoever, just that it no longer affects the thread that start is called on. Perhaps I misunderstood this.
I also misunderstood the original question as a more general question about concurrent operations and the isConcurrent flag, and the accepted answer is how to effectively say
isConcurrent flag can be ignored with 10.6 and iOS 4
I am not sure if this is correct.
If I now understand the original question, I rephrase:
Given a properly constructed parallel NSOperation , does the isConcurrent flag actually actually change the operation?
It's hard for me to say all the possible settings, but we can say that:
isConcurrent may have isConcurrent effectively deprecated, but since it can use only one BOOL flag, you should not try to condemn it in documents. Or perhaps it is not doing anything right now, but Apple has saved it for possible future use and expects you to redefine it as described.
I created a quick test project with NSOperation , which overloaded only isConcurrent and main , isConcurrent not called at any stage. However, it was a very simple test. I suppose you might have tested it too? I suggested, perhaps, if NSOperationQueue did not call it NSOperation's default implementation of start .
So where does this leave us? Obviously, it is not difficult to implement and return YES to satisfy documented requirements. However, from my point of view, I think this is too big a step to go from the caution regarding 10.6 and iOS 4.0 to say that it can now be safely ignored.
My original answer ...
isConcurrent not an obsolete method and is not ignored by NSOperationQueue . The documentation provided in the other answers is a bit unclear and easy to understand.
isConcurrent = YES means the operation provides its own concurrency funds. Or else, the operation "isAlreadyConcurrent" does not need an NSOperationQueue to provide and manage concurrency. Since NSOperationQueue no longer provides concurrency, you need to specify it when the operation isFinished or if it isCancelled (etc.), Therefore, you must override these methods.
A common example is NSOperation , which manages NSURLConnection . NSURLConnection has its own mechanism for working in the background, so it does not need to be done simultaneously by NSOperationQueue .
The obvious question is this: "Why put an already parallel operation in NSOperationQueue ?" Thus, an operation can benefit from other NSOperationQueue dependency NSOperationQueue , etc.
The misleading part of the documentation refers only to the thread to which the start NSOperation method is NSOperation . This caused the problem described in QA1712.