2011-01-28 3 views
3

По умолчанию объект returnd по методу alloc или copy имеет retain count, равный 1, поэтому вам нужно его самостоятельно разблокировать.Вопросы управления памятью NSTimer

Но через NSTimer выборочных код

 
// in one method start the timer (which myTimer is an Class Instance) 
myTimer = [NSTimer scheduledTimerWithTimeInterval:1 
        target:self selector:@selector(method:) 
        userInfo:nil repeats:YES]; 

// in another method 
[myTimer invalidate]; 
myTimer = nil; 

Мой вопрос, почему [NSTimer SCHE **] возвращает объект, который вам не нужно сохранить, но вы можете получить доступ к нему в любом месте. И вам не нужно выпускать его, а только называть его invalidate.

ответ

4

Экземпляр сохраняется в цикле выполнения, которому он назначен. Счет сохранения остается выше нуля до тех пор, пока цикл запуска не освободит его. Таким образом, вы можете получить доступ к объекту до тех пор, пока это не произойдет.

От NSTimer docs:

Таймеры работают в сочетании с пробегом петлями. Чтобы эффективно использовать таймер, вы должны знать, как работают циклы запуска работать-смотрите NSRunLoop и Threading Руководство по программированию. Обратите внимание, в частности, , что циклы запуска сохраняют свои таймеры, поэтому вы можете освободить таймер после того, как вы установили в цикл выполнения.

И тогда именно:

Используйте scheduledTimerWithTimeInterval: призывание: повторы: или scheduledTimerWithTimeInterval: Цель: селектор: USERINFO: повторы: метод класса для создания таймера и график его на текущий цикл цикла в по умолчанию.

Таким образом, метод, который вы использовали, работает с текущим циклом запуска автоматически.