The correct way to deal with it is to realise that if you need some settings that can be accessed/changed from many different classes then the design of your app is severely lacking. However, this doesn't necessarily that you need a more complex/sophisticated 'design'. ie. if you stick to TDD this situation is highly unlikely.
Hopefully this will stem the tide of questions on Stack Overflow about different Objective-c singleton implementations.
The correct way to deal with this is to realize you have a problem? I think the above comment is willing to admit a problem and is asking for a solution. What does TDD have to do with it?
I'm also interested in hearing what is considered the best practice for things like passing around config options, an eventloop, or message bus.
The solution is essentially to take a hard look at your design and see why you have to pass around config options, event loops, or message buses to begin with. The need to access global state is a code smell.
When you DO need global state, then a singleton object is a reasonable way to achieve it. But chances are fairly high that you don't.
You can look for days, and if you don't know any of the alternatives, none will pop out.
As I'm not in the mobile sphere, I wouldn't know how to avoid a singleton for an app that is constrained by speed and space requirements. I've already shown an example above, what's your solution in this environment, with the constraints of the questioner?
> if you need some settings that can be accessed/changed from many different classes then the design of your app is severely lacking.
If he's making a game, this is completely acceptable design. Games programming is wildly different from application or server programming. Also, strict TDD is much, much less useful in games programming than anywhere else. Writing unit tests for central data structures and algorithms is useful, of course, but the majority of modules/classes/objects are so small, uncritical, and change completely so often that it's not worth bothering.
Hopefully this will stem the tide of questions on Stack Overflow about different Objective-c singleton implementations.