2010-09-21 3 views
1
[NSTimer scheduledTimerWithTimeInterval:0.033 target:self selector:@selector(gameLoop) 
    userInfo:nil repeats:YES]; 

Я не делаю ничего, чтобы dealloc или убить этот таймер после его запуска. Безопасно? Или это приведет к утечке памяти?Безопасна ли эта память?

ответ

4

Не должно утечка памяти. Вы не сохраняете таймер. Запуск цикла сохранит его (я думаю), но он выпустит его, когда он больше не понадобится.

+0

Да, цикл запуска сохранит таймеры, когда они запланированы. – Wevah

+1

Таймеры также сохраняют цель. Поэтому, если объект, который также является целью таймеров, сохраняет таймер, формируется цикл сохранения. – Jasarien

+0

Да, таймеры сохранят свою цель. Таким образом, это будет означать, что таймер всегда срабатывает, пока цель не будет отменена. – AechoLiu

2

Таймер сохраняется в цикле запуска, поэтому вам не нужно его сохранять самостоятельно.

Однако таймер будет сохранить свою цель, так что, пока он повторяется, и вы не аннулируете его, ваш целевой объект не будет освобожден. Вам нужно выбрать подходящее время для вызова invalidate на нем, что вызовет запуск цикла выполнения.

Обратите внимание, что вы также не должны сохранять таймер, рискуя удержать цикл.

(я BORKED ответ на этот самый вопрос вчера и получил обучен на него. Пытаясь загладить.)

+0

Хорошо, я вижу, что это используется в приложении/коде образца GKTank. Он никогда не становится недействительным. Является ли яблоко, дающее образец кода плохой? Я стараюсь учиться на этих образцах -.- – 2010-09-21 16:50:59

Смежные вопросы