Асинхронный по сравнению с Синхронным по сравнению с Поточной обработкой в приложении для iPhone

Использование Scriptlets - очень старый способ и не рекомендуется. Если вы хотите напрямую вывести что-то на своих страницах JSP, используйте язык выражений (EL) и JSTL.

Существуют также другие варианты, такие как использование механизма шаблонов, таких как Velocity, Freemarker, Thymeleaf и т. д. Но использование простой JSP с EL и JSTL служит моей цели большую часть времени, и это также кажется самым простым для beginner.

Кроме того, обратите внимание на то, что для уровня бизнес-логики в уровне представления не лучше всего выполнять бизнес-логику на уровне сервиса и передавать результат на ваши представления через контроллер.

26
задан Grant Limberg 18 December 2008 в 04:06
поделиться

7 ответов

Я не думаю, что существует "правильный" ответ. Кажется пониманием включенных компромиссов, и просто необходимо сделать дизайн вокруг тех.

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

Для Вкусный я закончил не потоки использования. Я выполнил все свои асинхронные сетевые вызовы, и я использовал синтаксический анализатор XML по умолчанию (который работает с помощью спин вызова). Так как это все управляемо событиями, и каждая единица является небольшой, это позволяет GUI быть довольно жидким, не имея сложности поточной обработки.

я использую конечный автомат для выяснения, почему я получаю конкретный ответ и очередь так, чтобы я только перенес единственную операцию "в полете" в любой момент времени. Существует ясный приказ к большинству запросов, таким образом, у меня нет потребности в системе с приоритетом.

сетевой код является самым сложным в моем приложении, и требовалось много времени для получения работы намного менее устойчивого!

7
ответ дан Stephen Darlington 19 July 2019 в 15:16
поделиться

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

Определенно рассматривают NSOperationQueue, если Вы идете этим путем; это значительно упрощает создание нескольких рабочих потоков, и это также поддерживает приоритеты и зависимости между операциями. Прямо сейчас существуют некоторые проблемы с ним на 10,5, но я не услышал ни о каких проблемах о iPhone.

8
ответ дан Marc Charbonneau 19 July 2019 в 15:16
поделиться

Я лично смотрю на то, что делается, я буду ususally использовать запрос asyc, чтобы гарантировать, что UI не блокирует, однако, меня, МАЙ в ходе того запроса отключает UI моего приложения.

А главный пример этого находится в приложении, которое я создал с "поисковой" кнопкой. Как только поиск был инициирован как асинхронный запрос, я отключу кнопку, пока ответ не возвратился, effectivly ограничение способности к пользователю породить второй запрос asyc.

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

1
ответ дан Mitchel Sellers 19 July 2019 в 15:16
поделиться

Я рекомендовал бы asychronous путь, никакой вопрос. Затем загрузите информацию только при необходимости и используйте систему делегата для предоставления той информации правильному объекту.

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

1
ответ дан August 19 July 2019 в 15:16
поделиться

Почему не может Вы использовать асинхронный запрос как так:

- (NSArray *)users {
     if(users == nil && !didLaunchRequestAlready )
        users = do_async_request // Looks good to me
     return users;
 }

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

-1
ответ дан Kendall Helmstetter Gelner 19 July 2019 в 15:16
поделиться

Официальный ответ состоит в том, что вы должны почти всегда использовать асинхронный режим и что синхронный - это плохо . Я обнаружил, что ASIHTTPRequest упрощает выполнение асинхронных запросов.

8
ответ дан 28 November 2019 в 17:16
поделиться

Просто мысль: Если вы хотите использовать фреймворк Unit Testing для iPhone, вы возможно захотите иметь синхронную функциональность, поскольку это может облегчить написание тестов.

Однако некоторые из ваших API могут работать не синхронно, поэтому вам нужно превратить их в синхронные задачи. Если код, выполняющий модульное тестирование, работает в собственном потоке, можно написать обертку, которая будет ждать завершения асинхронной задачи.

Для этого можно использовать семафор: Ваша функция-обертка запускает асинхронную операцию, а затем использует семафор, чтобы заблокировать себя (т.е. перевести себя в спящий режим). Обратный вызов, сигнализирующий о завершении асинхронного события, освобождает семафор, так что спящий поток обертки может продолжить работу и вернуться.

1
ответ дан 28 November 2019 в 17:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: