Какао: объект автоматически высвобождается, когда не должен - PullRequest
1 голос
/ 12 января 2012

Во-первых, я должен сказать, что я использую ARC, поэтому сохранение - не вариант. Класс объекта имеет тип NSViewController и имеет два NSTimers, а также несколько текстовых полей и кнопок. Странно то, что когда два таймера становятся недействительными, похоже, что объект освобождается. Это проблема, потому что иногда я просто хочу приостановить или перезапустить их, что означает, что я должен сделать их недействительными, но как только я это сделаю, ссылка будет потеряна, и любое сообщение для объекта будет выдавать EXC BAD ACCESS.

Я не очень знаком с управлением памятью или ARC, но почему ссылка теряется в зависимости только от таймеров? Я имею в виду, только то, что они признаны недействительными, не означает, что мне больше не нужен объект.

Я пытался объявить таймеры переменными и свойствами экземпляра, но ничего не изменилось.

Что мне действительно нужно, так это чтобы ссылка не сохранялась, даже когда оба таймера аннулированы. Что я делаю не так?

1 Ответ

2 голосов
/ 12 января 2012

NSTimer сохраняет свою цель, поэтому, если это единственная ссылка на объект, она будет освобождена, когда таймер станет недействительным.Вам придется вступить во владение своим объектом, желательно, сделав его объявленным сильным свойством.

Редактировать: Изменил "делегат" на "целевой";

Да, вам придетсяобъявить свойство и (возможно) переменную экземпляра для него.Замечания к выпуску дают хороший пример, есть пара хороших вступлений.Убедитесь, что вы сделали недействительным таймер, если ваш класс владельца когда-либо освобожден, иначе ваш контроллер представления будет зависать.

...