Я создал класс (MyClass) и вам нужно несколько экземпляров, каждый из которых будет содержать несколько таймеров, текстовых полей и меток. Из-за ARC, цель была освобождена, когда таймеры были недействительными, но иногда я их недействителен, чтобы перезапустить их, поэтому я не могу позволить им освободиться. Поэтому я пошел в свой AppDelegate (который является классом, который создает экземпляры MyClass) и объявил MyClass как сильное свойство. @property (strong) MyClass *myInstance;
Это частично работает, проблема заключается в том, что всякий раз, когда я создаю другой экземпляр, предыдущий экземпляр теряет ссылку, и если я пытаюсь перезапустить NSTimer в старом экземпляре, я получаю BAD ACCESS. Если я перезапустил последний таймер, нет проблем.Независимо повторное использование объявленного сильного свойства
Я считаю, что поскольку myInstance является свойством, всякий раз, когда я создаю новый, AppDelegate перезаписывает старый, теряя старые ссылки. Мне нужно либо иметь возможность сохранить сильное свойство, но как-то заставить его работать независимо для каждого экземпляра или найти другой способ сделать myInstance сильной ссылкой, не имея при этом свойства.
Этот дизайн довольно хрупок в любом случае. NSTimers не должны быть признаны недействительными и перезапущены. Вы должны либо использовать ваш обратный вызов, чтобы игнорировать тики, когда они должны быть «приостановлены» или просто создавать новые. – Chuck
@ Чак, что значит игнорировать тики? и как? – Elbimio
@Elbimio: вместо того, чтобы аннулировать таймер, пусть он срабатывает. Когда это произойдет, проверьте, приостановлена ли вы, и делайте то, что должно быть периодическим, если вы этого не сделаете. –