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
и таймер сохраняется под этим вызовом.
Таким образом, тот факт, что таймер сохраняется, а кнопка не сохраняется, имеет отношение к планированию таймера в цикле выполнения и не имеет ничего общего с целью любого объекта.
Вам могут быть полезны следующие справочные материалы:
- Об управлении памятью
- Автоматический подсчет ссылок
- Запустить управление циклами
- Ссылка класса NSTimer
Если вы начинаете новый проект, вам, безусловно, следует использовать автоматический подсчет ссылок (и в Xcode он будет включен для вас по умолчанию при создании нового проекта). Эта система не освобождает вас от необходимости думать об использовании памяти вашей программой, но облегчит вам задачу.
Я включил ссылку на управление циклами выполнения, но вам, вероятно, не потребуется выполнять какое-либо ручное управление циклами выполнения. Просто хорошо иметь общее представление о том, что означает "цикл выполнения", когда он встречается в другой документации.