A concrete-protocol-based approach to Objective-C singletons