Earlier quoted context omitted.
Adding on to your #3, concurrency became MUCH, MUCH easier in iOS 5. Core Data gained the concept of a background/main thread context and the two methods -performBlock: and -performBlockAndWait:. See: https://developer.apple.com/library/mac/ipad/#documentation/... and http://www.cocoanetics.com/2012/07/multi-context-coredata/
This requires performing all mutation on dedicated code paths. If you require non-asynchronous completion, you have to use the 'wait' variant, but this introduces deadlock risk between threads. This in turn litters your code with Core Data isms, and means that one can not simply make use of their model as a standard in-memory model. Compare to SQLite, where one can simply open and commit a transaction synchronously o…
And yes, you can still not use a persistent store manage context on multiple queues.
Please stop using the word thread and use the word queue :)