NSTimer является retaind, а действие NSButton не сохраняется

Мой вопрос почему

[myButton addTarget:self action:@selector(myAction) forControlEvents:UIControlEventTouchUpInside];

это не сохранить и

mytimer = [NSTimer scheduledTimerWithTimeInterval:1.0f
                                          target:self
                                        selector:@selector(_timerFired:)
                                        userInfo:nil
                                         repeats:YES];

является повторной, где оба имеют целевую личность, так почему один остается, а другой нет. @конец

1 ответ

Решение

NSTimer создан с +[NSTimer scheduledTimerWithTimeInterval:…] запланирован на текущий цикл выполнения, а сам цикл выполнения сохраняет таймер.

Это можно увидеть, если вы профилируете свою программу с помощью инструмента выделения ресурсов и выполните поиск живых экземпляров CFRunLoopTimer, Вы увидите это под своим призывом к scheduledTimerWithTimeInterval:… есть вызов CFRunLoopAddTimerи таймер сохраняется под этим вызовом.

Таким образом, тот факт, что таймер сохраняется, а кнопка не сохраняется, имеет отношение к планированию таймера в цикле выполнения и не имеет ничего общего с целью любого объекта.

Вам могут быть полезны следующие справочные материалы:

Если вы начинаете новый проект, вам, безусловно, следует использовать автоматический подсчет ссылок (и в Xcode он будет включен для вас по умолчанию при создании нового проекта). Эта система не освобождает вас от необходимости думать об использовании памяти вашей программой, но облегчит вам задачу.

Я включил ссылку на управление циклами выполнения, но вам, вероятно, не потребуется выполнять какое-либо ручное управление циклами выполнения. Просто хорошо иметь общее представление о том, что означает "цикл выполнения", когда он встречается в другой документации.

Другие вопросы по тегам