Ну, вы знаете, это именно то, что делает использование многопоточности сложным: вы всегда сталкиваетесь с проблемами синхронизации.
Я предлагаю вместо вызова [tableView reloadData]
из вашего потока просто сигнализировать контроллеру(вызывая метод controllerShouldReloadTable
) и позвольте вашему контроллеру проверить, был ли вызван windowWillClose
или нет.Может быть вероятность того, что ваш контроллер также будет выпущен ко времени controllerShouldReloadTable
, и чтобы исправить это, вам определенно понадобится retain
контроллер из вторичного потока.
На стороне заметку, яотменял бы поток в viewDidUnload
(для симметрии).
Самое важное: я бы использовал асинхронные вызовы и класс делегата, чтобы вся проблема многопоточности была решена в корне.
EDIT: Асинхронная отправка запроса не будет блокировать отправляющий поток, ожидающий ответа.Вместо этого асинхронная отправка (для NSURLConnection
называется start
) немедленно возвращается (поэтому блокировка отсутствует), и когда ответ получен, будет вызван метод делегата (т. Е. connectionDidFinishLoading:
), чтобы вы могли обновить модельи пользовательский интерфейс.Взгляните на NSURLConnection
документов, но, как обычно, я настоятельно рекомендую использовать [ASIHTTPRequest][2]
, который имеет много преимуществ .