Действительный NSTimer сохраняется в цикле выполнения, который, если он повторяется, будет длиться вечно или до тех пор, пока вы не аннулируете его.Вы не должны выпускать его, так как в вашем примере кода вы не сохранили его явно.Если вы сделаете его недействительным, он больше не будет сохраняться в цикле выполнения и будет автоматически освобожден.
Это может быть нормально для повторяющегося таймера, но опасно для одноразового таймера, поскольку может закончитьсябыть выпущенным до того, как вы получите к нему доступ, чтобы увидеть, является ли он действительным и / или попытаться сделать его недействительным (что приведет к сбою приложения с плохим доступом).Поэтому, если вы планируете каким-либо образом просматривать переменную таймера после ее создания (в том числе проверять ее, делать недействительной и / или освобождать ее), хорошей практикой может быть явное сохранение ее где-то в вашем приложении, а затемОтпустите его и установите его равным nil после того, как он недействителен, и все готово.
Вы можете освободить его и установить его равным nil в одном выражении, если вы объявите его как свойство сохранения.Тогда вы можете написать:
self.timer = nil;