I am using a shared instance of a singleton class in a function, do I need to do a retain on the object? A few examples I have seen do this: AVAudioSession *session = [[ AVAudioSession sharedInstance] retain]; while a few simply do: AVAudioSession *session = [ AVAudioSession sharedInstance];. I am sure there is a rule somewhere which should tell me what to do but I just don’t know it.
I am using a shared instance of a singleton class in a function, do
Share
You’re right, there are rules that tell you what to do. They’re the same rules you use everywhere else in Cocoa Touch. Clients of a singleton shouldn’t care that the object they’re using is a singleton, and they definitely shouldn’t rely on the singleton’s single-ness to avoid the usual memory management conventions.
Yes, if you know that an object is a singleton and you know that it won’t be deallocated, retaining it might seem redundant. On the other hand, retaining the singleton when you acquire it and releasing it when you’re done better documents the programmer’s intent and avoids the need to explain to anyone (including the future you) why it’s okay not to retain this particular object. Most importantly, it prevents your code from depending on an implementation detail of some other part of your code.