Какой хороший общий подход для приложений, таких как Pulse, YouTube, NYTimes и т. Д.?Использовать UIWebView или что-то еще? - PullRequest
0 голосов
/ 26 января 2011

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

Так, например, для iOS не слишком ли эффективно использовать uiwebview для каждой из этих ячеек? Кажется, что это будет простой подход, но я не уверен в производительности. У «Пульса» одновременно есть несколько ячеек на странице, и на iPad это может быть очень много. Лучше сделать это, используя методы более низкого уровня, или использовать UIWebView достойный выбор?

Обновление: Разъяснение -> Просто чтобы прояснить, я понимаю, что типичным подходом является использование UITableView, а затем создание ячеек таблицы для хранения и отображения данных (хотя пользовательский интерфейс «Пульс» может быть более сложным). Я имею в виду, что эти UITableViewCells могут содержать UIWebViews? Поэтому вместо размещения UIImageView и UITextView в каждой ячейке и т. Д., Если имеет смысл просто вместо этого поместить туда UIWebViews и дать им URL-адреса (можно передать параметр для указанной строки) для загрузки в качестве вызываемого cellForRowAtIndexPath или чего-то еще.

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Не используйте UIWebViews с такими UITableView. Для UITableView слишком много движущихся частей!

Я написал приложение для iPhone NYTimes, пока работал там. Я только когда-либо использовал UIwebView для отображения содержимого статьи. Это связано с тем, что макеты статей и публикаций в журналах NYT чрезвычайно сложны и не поддаются программной репликации. (Я переопределил некоторые CSS в приложении)

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

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

С UITableView вам нужно создать ОЧЕНЬ высоко оптимизированные пользовательские UITableViewCells. Данные, отображаемые в ячейках, должны агрессивно кэшироваться вами, чтобы вам не нужно было пересчитывать их или выполнять интенсивные вычисления макета. Некэшируемая информация, такая как удаленные изображения, должна загружаться асинхронно (что может означать, что они появляются намного позже).

При кэшировании: Приложения NYT имеют высокопроизводительную систему кэширования изображений. Хитрость заключается в том, чтобы запросить данные imge, как только они «понадобятся», но также выгрузить изображения, которые были необходимы секунду назад, но больше не нужны. Вы также не хотите отменять частично загруженные изображения, потому что это тратит впустую уже использованную пропускную способность. Проверьте NSOperationQueue. У него есть большинство рычагов, необходимых для построения такой системы.

Еще одно замечание: рассмотрите возможность создания веб-приложения, если к вашему проекту также можно получить доступ через веб или приложение для Android.

1 голос
/ 26 января 2011

Ну, если вы говорите о приложении YouTube, то это не UIWebview. Общий и лучший подход заключается в использовании UITableViews вместе с пользовательскими UITableCells. Что касается асинхронной загрузки изображений, мы реализуем механизм «Ленивая загрузка». И таким образом, мы можем сохранить преимущество производительности нативного UIView. Принимая во внимание, что в UIWebView вам нужно будет разработать веб-страницы на базе iphone, что обойдется вам в изучение инструмента Dashcode, или, может быть, в другую библиотеку CSS с открытым исходным кодом и т. Д.

Короче говоря, UITableView с пользовательскими UITableCells вместе с ленивым механизмом загрузки (достигаемым некоторыми методами потоков) сделает всю магию за вас.

Надеюсь, что этот ответ даст вам лучшую идею ....

...