Многопоточность в ios - PullRequest
       3

Многопоточность в ios

0 голосов
/ 27 февраля 2012

Нужна ваша помощь.

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

И мой основной поток должен продолжать проверять папку документов и отображать обновленные данные в элементе управления представлением.

Дочерний поток должен завершиться после исчезновения представления.и начните снова, как только появится представление.

Каков наилучший способ сделать это?NSThread или NSOperationQueue?Какие меры предосторожности требуются?Я также должен получить доступ к нескольким переменным класса.Так что это должно быть потокобезопасным.

Заранее спасибо.

С уважением

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012


Если вам не нужно обновлять индикатор выполнения или что-то в iOS5, есть один отличный метод API + sendAsynchronousRequest:queue:completionHandler:, который позволяет запускать асинхронную загрузку как блок внутри NSOperationQueue.Если нет, то вам следует обратиться к сторонним библиотекам, таким как запрос ASIHTTP или https://github.com/AFNetworking/AFNetworking(probably лучше последнего), или вам нужно создать собственный менеджер загрузок, а не простую задачу

0 голосов
/ 27 февраля 2012

Вы можете взглянуть на - (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg Этот метод создает новый поток в вашем приложении, переводя ваше приложение в многопоточный режим, если это еще не было.В вашем viewDidDisappear вы можете остановить задачу, когда ваш вид исчезнет

из Apple Docs.Apple рекомендует исследовать альтернативные технологии Mac OS X для реализации параллелизма.Это особенно верно, если вы еще не знакомы с методами проектирования, необходимыми для реализации многопоточного приложения.Эти альтернативные технологии упрощают объем работы, которую необходимо выполнить для реализации одновременных путей выполнения, и обеспечивают гораздо лучшую производительность, чем традиционные потоки.https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/AboutThreads/AboutThreads.html#//apple_ref/doc/uid/10000057i-CH6-SW2

0 голосов
/ 27 февраля 2012

Есть два способа сделать это ..

Во-первых: вы используете NSOperationQueue, который немного объемнее, поскольку он построен на GCD, но имеет некоторые дополнительные функции.

Второе: вы используете GCD (грандиозная центральная диспетчеризация), рассматривая требования. Я бы сказал, что GCD выглядит нормально, так как вы можете легко получить доступ к любому потоку (основному или фоновому), это будет немного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...