Что делать, если я освобождаю объект, когда объект все еще работает одним из его методов? - PullRequest
0 голосов
/ 21 октября 2010

Мое приложение создаст объект. Этот объект будет непрерывно запускать один из своих методов, скажем, пакетной обработки изображений.

Если его метод работает, и я освобождаю объект, и он освобожден, будет ли iO автоматически иметь дело с методом объекта? например, автоматически прекратить запуск метода объекта и избежать bad_exec?

Ответы [ 2 ]

1 голос
/ 21 октября 2010

когда вы вызываете release и ваш счетчик ссылок достигает 0, вызывается dealloc вашего объекта.это все.

, что означает: если вы обрабатываете в одном потоке и ваш объект отправляется освобожденным из другого потока (или того же потока по какой-то другой неправильной причине), то вам следует ожидать неопределенного поведения (что, вероятнопривести к прекращению, EXC_BAD_ACCESS или что-то такое же приятное).в этом случае что-то должно удерживать ссылку на объект (например, подкласс NSOperation).

0 голосов
/ 21 октября 2010

Если вы освобождаете объект, это означает, что ОС может свободно использовать память и перезаписывать ее другими данными.

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

Метод, который использует только глобальные или локальные переменные (и не нуждается в дальнейшей инициализации или присваивании от объекта), может быть безопасным, но это всего лишь метод C или метод класса, маскирующийся под метод экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...