Выключение многопоточного NSDocument - PullRequest
3 голосов
/ 22 февраля 2010

У меня есть приложение Какао на основе NSDocument, и у меня есть пара вторичных потоков, которые мне нужно изящно завершить (ждать, пока они пройдут через текущий цикл), когда пользователи закрывают окно документа или когда приложение закрывается. Я использую canCloseDocumentWithDelegate для отправки флага потокам, когда документ закрывается, а затем, когда они закончили, один из них вызывает [NSDocument close]. Кажется, что это работает очень хорошо, когда пользователь закрывает окно документа, но когда вы выходите из приложения, оно идет не так, как надо (вылетает, прежде чем что-либо вызывает). Какова правильная процедура для чего-то подобного?

1 Ответ

4 голосов
/ 23 февраля 2010

Наилучшим из возможных способов является то, что потоки владеют объектами, необходимыми для того, чтобы поток закончил делать все, что он делает, вплоть до возможности прервать обработку и завершиться как можно быстрее.

Под не-GC это означает -retain, что поток -release s когда закончено. Для GC это просто жесткая ссылка на желаемый объект (ы).

Если есть какая-то длительная обработка, которая должна продолжаться и должна завершиться до закрытия документа, тогда перетащите лист с индикатором выполнения и оставьте документ модальным до сделано (и Aperture, и iPhoto делают именно это).

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