They both seem to take about the same amount of effort to use:
Singleton: needs a .h and .m file, has to be imported into any class you want to call it from and then has to be instantiated
How is that any different than a class?
5
A singleton is a class and behaves exactly like any other class, the only exception being that any instances of a singleton reference the same object data. This means that any instance of a singleton class are actually all the same instance.
A singleton isn’t really the same as a class, it is more commonly known as a design pattern. Usually a singleton is a class such that only one instance of it can exist at a time.
Practically speaking, you could write a class with nothing special about it, create one instance at the beginning, and throughout your code, just use the same instance, and you could still call it a singleton. Normally, people add a little overhead code, so that an object is instantiated as per normal, but when someone tries to instantiate a second object from it, it returns the first object instead. This allows global data (some argue this is bad), it allows the object to be instantiated by what ever code needs it first by allowing all parts of code to reference it as if they were creating an object, and if you implement the destructors appropriately, you can even destroy and recreate the object if you need to do that for some reason.
You can check out https://en.wikipedia.org/wiki/Singleton_pattern for more information and sample code to enforce how the singleton will be used.
Design patterns are a topic addressed in the book called, “Design Patterns”, by a group known as the “Gang of Four”, which is a bit of a classic in the programming world. It looks at several different design patterns, and goes in to much more detail not only the implementation, but also why you would or should use one pattern for what kind of scenario. You can also look at https://en.wikipedia.org/wiki/Software_design_pattern for a briefer overview.
1