On the bottom of page 101 when we get the available voices from the speech synthesizer, we retain the returned array as follows:
voiceList = [[NSSpeechSynthesizer availableVoices] retain];
I thought I understood Objective-C reference counting pretty well, but I must confess I don’t understand why the retain is necessary. I tried the code without it, and, sure enough, it didn’t work. Why is retain needed? Doesn’t the array returned by NSSpeechSynthesizer availableVoices already have its retain count set to 1?