3 ms·
Same experience, except i would strongly advise against using core data, and i would also recommend to do layout with autolayout in xib ( not storyboards) for c
by bsaul 10y ago
Same experience, except i would strongly advise against using core data, and i would also recommend to do layout with autolayout in xib ( not storyboards) for complex views, instead of code, and use manual layout only for performance critical code.
Many people don't realize they don't actually need a database.
. Most app have their full set of data weight less than a megabyte, so it fits in memory without any trouble.
. Querying is often never more than a call to a map on an array ( simpler to debug than a core data query, and type safe)
. Atomicity with concurrent access, if you absolutely need it, is a real mess in core data. Even with core data you often end up doing everything on a single thread anyway (and most often this is the main thread).
. Core data will blow up in your face, either when trying to upgrade your app, or duplicate the data for backup. In ways that'll make you sweat everytime you push a new version.
So my advice is to work with a dumb data structure ( structs and not classes) that you dump in a file when application goes to background (or periodically if you want to play it safe), and perform your queries manually, and load all at once at application start.
And if you need parallell access to the data, work with message passing style concurrency, and have a data component that works within its own thread ( very easy to do with gcd). You'll feel like writing a bit of boilerplate code, but at least you'll understand what's going on.
- antonholmquist 10y agoThanks for your reply! I don't agree that concurrency is a mess with Core Data, it has good support for this. Of course you need to be careful to get things right, but this goes for whichever technology you are using. As for upgrading the app, if you are doing anything else than a lightweight migration you need to know what you are doing, but that problem doesn't at all go away if you roll your own database layer. I believe Core Data is actually of great help in solving those pretty complex problems.
- bsaul 10y agoThe whole managed object context paradigm is clunky. It's meant to be a system of nestable sandboxes for performing discardable operations on the database, but when you start to mix concurrency inside, it becomes intractable. Reading the documentation on concurrency and managedobject context would make any people's eyes go blank (https://developer.apple.com/reference/coredata/nsmanagedobjectcontext https://developer.apple.com/reference/coredata/nsmanagedobje...). IMHO, i don't think that 80% of the people using core data understand the concept of managed object context properly. For example, i'm pretty sure everyone wonders what's going on when they try to reuse an object from a context in another and get weird behaviors. My main point isn't that one should recode a database manually, but that it's extremely rare to need that kind of system in a mobile app in the first place. Also i think that performing a set of sql query in an sqlite database is much much simpler than creating a correct process for a core data model migration.
- antonholmquist 10y agoAppreciate your thoughts on this! Core Data is far from trivial but can also be incredibly powerful. I actually think a lot of apps can benefit from the persistence and advanced notification system it offers.