Когда срабатывает неповторяющийся таймер, он помечает себя как недействительный, поэтому вы можете проверить его действительность, прежде чем отменить его (и, конечно, затем избавиться от него).
if ( [timer isValid] && yourOtherCondition){
[timer invalidate], timer=nil;
}
В вашем случае у вас есть повторяющийся таймер, поэтому он всегда будет действителен, пока вы не предпримете какое-либо действие, чтобы аннулировать его. Похоже, что в этом случае вы запускаете обратный отсчет, поэтому вам нужно убедиться, что вы сделали недействительным и избавитесь от него, когда обратный отсчет достигнет желаемого значения (в вашем методе updateCountdown)