Есть ли какой-нибудь пример кода для выполнения задач многопоточности iPhone? - PullRequest
1 голос
/ 06 декабря 2008

У меня есть медленная интернет-задача для сохранения и загрузки файла, я бы хотел выполнить эти медленные задачи в некотором фоновом потоке. Мне интересно, выполнимо ли это, и если да, то какой-нибудь пример кода?

Затем, после его завершения, я бы хотел, чтобы он обратил внимание на основной поток, чтобы я мог обновить интерфейс.

Ответы [ 4 ]

7 голосов
/ 06 декабря 2008

Посмотрите на NSURLConnection. Он загрузит NSURL (используя NSURLRequest) в фоновом режиме и отправит методы делегата относительно его статуса.

2 голосов
/ 06 декабря 2008

В конечном итоге устройство, на котором вы выполняете код, имеет один процессор и не может загружать большие объемы (гигабайты) данных. Вероятно, лучший маршрут по предложенному Беном (NSURLConnection асинхронно) дает вам дополнительное преимущество, заключающееся в возможности чистой отмены и обработки сообщений об ошибках. Хотя технически это не связано с тем, как вы, вероятно, думаете, оно должно быть, оно хорошо интегрировано в цикл обработки событий и не блокирует. Если этого все еще недостаточно, я бы посоветовал взглянуть на NSOperation и NSOperationQueue. Вы можете запустить объект подкласса NSOperation и выполнить загрузку там (я все же рекомендовал бы делать это асинхронно там, чтобы включить отмену, приостановку и т. Д.).

2 голосов
/ 06 декабря 2008

Войдите в Центр разработчиков iPhone и найдите «Введение в многопоточное программирование». Или, может быть, вы можете войти и использовать эту ссылку:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/Multithreading/Introduction/chapter_1_section_1.html#//apple_ref/doc/uid/10000057i-CH1-SW1

1 голос
/ 07 декабря 2008

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

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