Вопрос памяти NSTimer - PullRequest
       20

Вопрос памяти NSTimer

3 голосов
/ 28 января 2011

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

Но через 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.

1 Ответ

4 голосов
/ 28 января 2011

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

Из документов NSTimer :

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

А затем, в частности:

ИспользуйтеscheduleTimerWithTimeInterval: вызов: повторения: или scheduleTimerWithTimeInterval: цель: селектор: userInfo: repeatats: метод класса для создания таймера и планирования его в текущем цикле выполнения в режиме по умолчанию.Используемый метод работает с текущим циклом выполнения автоматически.

...