Чтобы улучшить производительность, я создаю подпредставления для моего вида прокрутки в фоновом потоке, а затем публикую событие в основном потоке, используя performSelectorOnMainThread
, добавляю представление в вид прокрутки и переводю его в шрифт. Однако иногда я получаю сбой.
Когда я проверяю это в моей фоновой ветке.
if( nil == myView.view.superview)
Как я могу выполнить эту проверку потока безопасно в фоновом потоке. Если мне нужно выполнить в главном потоке, мне нужно много изменить дизайн, поэтому может быть способ, которым я отправлю его в основной поток и использую возвращаемое значение.
Я открыт для альтернатив на том же.
ТИА
Правин S
EDIT:
Я реализовал UIScrollview с подкачкой страниц. Однако из-за проблем с производительностью и улучшения отзывчивости интерфейса я переместил создание подпредставлений в другой поток, используя
[self performSelectorInBackground:@selector(loadPages:) withObject:nil];
На страницах загрузки я делаю следующее
if( nil == myView.view.superview)
{
Create the view
[[self performSelectorOnMainThread:@selector(refreshViews:) myView.view waitUntilDone:YES];
}
В режиме обновления я добавляю подпредставление в представление прокрутки и выводю его на передний план.
[myScrollView addSubview:views];
[myScrollView bringSubviewToFront:views];
Однако, добавление и управление страницами работают нормально Прокрутка в порядке, хорошо, вид плавный. Но когда я быстро прокручиваю его (быстро проводишь по экрану), приложение вылетает.
Отладчик сообщает, что сбой произошел по адресу obj_msgSend после проверки if на страницах загрузки.
РЕДАКТИРОВАТЬ: трассировка стека - Ну, это произошло при проверке @synchronized на этот раз. Я отредактировал журнал сбоев, чтобы удалить конкретные имена проектов по соображениям безопасности, но трассировка такая, как показано ниже.
#0 0x33a06464 in objc_msgSend ()
#1 0x314d6984 in -[UIViewController _loadViewFromNibNamed:bundle:] ()
#2 0x314d5cb8 in -[UIViewController loadView] ()
#3 0x313d6226 in -[UIViewController view] ()
#6 0x00009920 in -[myViewController loadPages:] (self=0x12a2a0, _cmd=0x1eac1, abcd=0x0) at
#7 0x302d9198 in -[NSThread main] ()
#8 0x302d2248 in __NSThread__main__ ()
#9 0x3110c88c in _pthread_start ()
#10 0x31101a90 in thread_start ()