У меня есть UITableView, который отображает изображения. Каждая клетка имеет образ и каждый раз, когда клетка нагрузку, звонит селектор (от cellForRowAtIndexPath) в фоновом режиме, как это:Правильный способ многопоточности в объективе-c?
[self performSelectorInBackground:@selector(lazyLoad:) withObject:aArrayOfData];
Единственная проблема заключается в том, что иногда я получаю аварию (потому что я меняюсь данные в фоновом режиме, пока он пытается прочитать в другом месте). Вот ошибка:
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <CALayerArray: 0xce1a920> was mutated while being enumerated.'
При обновлении данных в фоновом режиме, необходимо переместить ее на основной селектор и изменить его? Или я должен называть @selector() по-другому?
Спасибо!
Я попытался использовать блоки GCD, и загруженные изображения ДЕЙСТВИТЕЛЬНО медленно выскочили сразу (вместо загрузки по отдельности). Я пошел с вашим первым предложением, чтобы использовать 'performSelectorOnMainThread:' при изменении данных. Фотографии загружаются мгновенно, и я не мог просить ничего лучше. Надеюсь, у меня больше нет проблем. Благодаря! – iosfreak
@ phpnerd211 Чтобы переключиться на основной поток, вам придется использовать 'dispatch_async (dispatch_get_main_queue(), block);', но 'performSelectorOnMainThread' тоже в порядке. Рад помочь. –