Имхо, регекспы — переоцененный инструмент. Да, он неплохо решает определённый подкласс задач: например, поиск email в тексте, вычленение телефона номера из форматированной строки, etc. Но для него так же есть как слишком простые (поиск символов в подстроке), так и слишком сложные (парсинг файлов) задачи.
Конкретно тут в голову приходят несколько реализаций, которые будут не длиннее по коду и уж точно будут работать быстрее. Доберусь до чего-нибудь с xcode — скину пример.
textContainerInset даёт константную ошибку, так что это точно не оно. lineFragmentPadding… Может быть.
Я обычно создаю CTFramesetter и использую CTFramesetterSuggestFrameSizeWithConstraints.
На win7 x64 где-то в районе Beta 3 резко возросло потребление памяти. Раза этак в 2. Если раньше самый «толстый» процесс потреблял 160мб памяти, то теперь — периодически переваливает за 300.
Как вы решили неточность расчёта размера текста?
Если ничего не изменилось за 2 мажорные версии iOS — boundingRectWithSize и, собственно, UITextView используют разные движки рендера текста. И результирующие размеры не совпадают.
Собственно, типичная ситуация: на 100 строк текста шрифтом Helvetica Neue boundingRectWithSize: даёт ошибку больше, чем высота двух строк.
Но вот основной проблемой остаётся прокрутка в середину таблицы — эта операция требует полного пересчёта всех промежуточных ячеек, либо кучи магии с перепозиционированием.
К сожалению, Эппловская документация грозится полной блокировкой работы с UIKit из фонового потока — со следующей мажорной версии iOS попытка обратиться к интерфейсу из фонового потока будет кидать исключение.
Так же, используя autolayout, вы можете кешировать размер ячеек без предварительного расчёта совсем: в методе cellWillDisplay: размеры ячеек уже рассчитаны и вы можете получить актуальный frame ячейки.
Фичреквест:
— Отклонение уведомлений раз и навсегда (для отдельного сайта или вообще как таковых)
— Отклонение геолокации раз и навсегда (для отдельного сайта или вообще как таковых)
— Блокировка js-хоткеев (для отдельного сайта или вообще как таковых)
Не люблю, когда сайты считают, что они умнее пользователя :)
Вы стали жертвой непонимания терминов.
Табы в понимании Mac OS X — это именно то, что вы увидели.
Вкладки сафари — стандартным элементом системы, вроде бы как, не являются.
А вообще iOS в плане API по сравнению в OS X выглядит как большая работа над ошибками.
Проблема в том, что не все следят. Я пришёл к выводу о необходимости такого правила, когда обноружил баг в модуле, который на прошлом тестировании работал, вызванный вот такими строками:
if (zoom == 1)
// log(items);
self.redraw();
А вся команда должна себя ограничивать потому, во-первых, любой может быть невнимателен, а во-вторых, потом вся команда будет искать этот баг
4 месяца. Учитывая, что они выкатывают апдейты каждую неделю — это 16 релизов. За это время они успели исправить пару старых багов и добавить десятка 2 новых :)
Вообще, насколько я знаю, у них используются сторонние проприетарные библиотеки с закрытым кодом, которые они не могут выложить, а так же из-за этого они не могут выложить х64 версию. Хотя она собирается из этих же исходников с подключением библиотек, взятых из релизной версии.
Возможно им требуется время на приведение проекта в состояние, в котором публикация кода не нарушит лицензий. Но для таких случаев можно и скрипт написать, тем более, если код они уже многократно обновляли.
Конкретно тут в голову приходят несколько реализаций, которые будут не длиннее по коду и уж точно будут работать быстрее. Доберусь до чего-нибудь с xcode — скину пример.
Я обычно создаю CTFramesetter и использую CTFramesetterSuggestFrameSizeWithConstraints.
Быстрее и читабельнее пройтись циклом по символам строки.
Если ничего не изменилось за 2 мажорные версии iOS — boundingRectWithSize и, собственно, UITextView используют разные движки рендера текста. И результирующие размеры не совпадают.
Собственно, типичная ситуация: на 100 строк текста шрифтом Helvetica Neue boundingRectWithSize: даёт ошибку больше, чем высота двух строк.
Так же, используя autolayout, вы можете кешировать размер ячеек без предварительного расчёта совсем: в методе cellWillDisplay: размеры ячеек уже рассчитаны и вы можете получить актуальный frame ячейки.
— Отклонение уведомлений раз и навсегда (для отдельного сайта или вообще как таковых)
— Отклонение геолокации раз и навсегда (для отдельного сайта или вообще как таковых)
— Блокировка js-хоткеев (для отдельного сайта или вообще как таковых)
Не люблю, когда сайты считают, что они умнее пользователя :)
Табы в понимании Mac OS X — это именно то, что вы увидели.
Вкладки сафари — стандартным элементом системы, вроде бы как, не являются.
А вообще iOS в плане API по сравнению в OS X выглядит как большая работа над ошибками.
Кстати, я когда-то писал вам с предложением ввести правило для такого случая, можете перепроверить личку :)
if (zoom == 1)
// log(items);
self.redraw();
А вся команда должна себя ограничивать потому, во-первых, любой может быть невнимателен, а во-вторых, потом вся команда будет искать этот баг
Вижу, что сдали. А где статья? :D
P.S.: Вы разработчик KeenSWH? По крайней мере из вашего ответа создалось именно такое впечатление.
Возможно им требуется время на приведение проекта в состояние, в котором публикация кода не нарушит лицензий. Но для таких случаев можно и скрипт написать, тем более, если код они уже многократно обновляли.