Как только вы сделаете недействительным таймер, просто наберите на нем release
(при условии, что вы сохранили ссылку, на которой держитесь), а затем обнулите свою ссылку. Таким образом, когда вы выходите из представления, попытка аннулировать таймер во второй раз просто вызовет этот метод вместо nil, который ничего не делает.
В качестве альтернативы, вы можете использовать -[NSTimer isValid]
, чтобы проверить, является ли он действительным до аннулирования, но на самом деле нет никакой причины удерживать вашу ссылку после ее аннулирования в первый раз в любом случае. Кроме того, если ваша настоящая проблема заключается в том, что вы не сохранили свою ссылку, и поэтому первый -invalidate
фактически оставляет вас со ссылкой, указывающей на освобожденный объект, то вызов -isValid
в любом случае не поможет.