Для начала, я понимаю, что может быть причиной этой проблемы путем решения предыдущей задачи неправильно ...Стоп ребенок темы от `` performSelector` на viewDidDisappear`
В ViewController
основном потоке Я начинаю фоновый поток чтобы получить обновленные данные с сервера, используя:
[self performSelectorInBackground:@selector(sampleTask:) withObject:@"CMD" ];
Этот процесс может занять 15-30 секунд, так в основном потоке отобразить локальный кэш данных из базы данных SQLite (заполняется из предыдущего запроса на сервер в последний раз, когда вид был открыт) и перезагрузите таблицу после завершения синхронизации с сервером.
Если пользователь переходит из этого представления до завершения синхронизации с сервером, фоновый поток продолжает работать до тех пор, пока он не будет выполнен. Это само по себе не проблема, пока пользователь не передумает и не вернется в это представление снова. Если время правильное, есть два фоновых потока, которые пытаются синхронизировать данные с сервером. Если пользователь делает это несколько раз, количество потоков может нарастать. В конечном итоге приложение рухнет, если не вызовет другие проблемы на устройстве.
- Есть ли способ остановить созданные потоки на спусковом крючке, например
viewDidDisappear
? Или я должен писать блокировку для общего ресурса (например,
NSUserDefaults
), чтобы предотвратить запуск нового фонового потока?Или, как я уже упоминал в первой строке, есть ли у меня плохой подход к обновлению локального кеша, который вызывает дополнительные проблемы, подобные этому?
Эта строка кода не запускается фоновый поток. Он запускается в том же потоке, из которого он был вызван, только до истечения задержки. – rmaddy
Извините, неправильный пример, performSelectorInBackground был тем, что я имел в виду. Тем не менее, все же наблюдается аналогичное поведение с performSelector. Если performSelector ведет себя таким образом, как я вижу, что «sampleTask» все еще работает после запуска viewDidDisappear. Я использую модели segues между видами. Когда уничтожен ViewController, который выполняет функциюSelector? Это часть, которую мне не хватает? – messinga
Отредактировано OP, чтобы использовать фоновый поток, а не текущий поток. – messinga