Нет необходимости.
Если вы просто отпустите проигрыватель, а затем вызовете playButtonClicked, например:
[theMovie release];
[self playButtonClicked];
Она не будет выполнять вторую строку, пока не будет завершена первая или пока не будет выпущен фильм. Это все в одном потоке, поэтому он будет выполняться по порядку. Вам не нужен таймер для этого. Хотя в ситуациях, когда то, что вы ожидаете закончить, выполняется в новом потоке, вы должны использовать обратный вызов, а не угадывать, сколько времени это займет (что намного меньше 1 секунды!).
Кроме того, чтобы вы не поняли неправильно, «полное освобождение» - это просто вычитание retainCount на единицу. Он автоматически освободится, когда достигнет нуля.
Как примечание, почему так важно, чтобы фильм был выпущен (освобожден?) Перед выполнением playButtonClicked?
Кроме того, ваш waitForReleaseFinish: код будет работать , но в этом нет необходимости, поскольку фильм будет выпущен до создания таймера.