NSRunLoop получает странный селектор; возможное состояние гонки дурачества? - PullRequest
0 голосов
/ 26 августа 2010

У меня есть несколько потоков, выполняющих тяжелую работу, в то время как мой основной поток обрабатывает пользовательский интерфейс. Время от времени обратный вызов потоков в основной поток обновляет индикатор выполнения.

В общем, это не так стабильно. Я исправил проблемы, связанные с логикой, но одна из них не устранена. У меня есть некоторый код, который действует как кнопка остановки, а это означает, что поток не будет пытаться обновляться в следующий раз, когда будет проверять, что происходит.

Иногда, когда я нажимаю кнопку остановки, я получаю эту ошибку:

- [NSRunLoop isEnabled]: нераспознанный селектор отправлен в экземпляр ...

Кажется, это происходит, если я нажимаю кнопку остановки в конце рабочей фазы потока. В течение этого времени ничего особенного, кроме:

  • Освободить часть памяти OpenGL
  • Вызвать последний метод в главном потоке
  • Слить свой пул автозапуска
  • и возврат

Но, честно говоря, сообщение об ошибке слишком загадочно, чтобы я даже не знал, с чего начать. Может кто-нибудь пролить свет на NSRunLoop, каким может быть этот метод isEnabled, или на общее представление о том, что может пойти не так?

1 Ответ

1 голос
/ 26 августа 2010

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

...