• Оптимизируем работу SQLite с NSCalendar



      В предыдущей статье мы решили проблему некорректного использования SQLite week based calendar, написав свое расширение для этой СУБД.

      Наш расчет сошелся, однако скорость его работы оставляла желать лучшего. Обработка таблицы, содержащей всего лишь 2500 записей занимала около 6 секунд. В то время как запросы, использующие strftime() исполнялись за десятые доли секунды.
      Так чего же мы не учли?
    • Учим SQLite работать с локализированным календарем

        Учим  SQLite работать с локализированным календарем



        Часть1 — Английская версия, Часть2



        Недавно мне довелось портировать (точнее, переписывать) под iOS приложение для анализа посещаемости сайта. Поскольку данные подходили под реляционную модель, мы решили использовать SQLite. Насколько я знаю, других реляционных СУБД под iOS просто нет.

        Долго ли, коротко ли… Пришло время подсчитать понедельный КПД для определенного диапазона дат.
        Что же произошло дальше?
      • О блоках и их использовании в Objective-C часть 3-ая

          Так же как и в топике — «О блоках и их использовании в Objective-C часть 2-ая», мы продолжим говорить о преимуществах использования блоков на живых примерах.
          Здесь мы рассмотрим удобства использования блоков при управлении последовательностью операций.

          5. UIView анимации, последовательность анимаций.

          Для начала напишем простенький пример, в котором мы будем двигать кнопку с помощью анимаций(без блоков). Затем поменяем порядок анимаций чтобы посмотреть, какие изменения потребуются в коде.
          Читать дальше →
          • +12
          • 4,2k
          • 9
        • О блоках и их использовании в Objective-C часть 2-ая

            Продолжение топика — О блоках и их использовании в Objective-C часть 1-ая.

            Многие из тех кто впервые сталкивается с блоками (или замыканиями), задают вопрос — «а зачем? Если и без них можно». Да можно. Но использование блоков имеет не мало преимуществ, и первое из них — существенная экономия на количестве кода, а следовательно и на времени написания и поддержке. Дальше буду говорить примерами.

            Содержание:


            1. Работа с контейнерами на примере NSArray.
            2. Guards на примере UITableView.
            3. Использование блоков вместо классов на примере scheduled операций.
            4. Блоки вместо делегатов в UIAlertView.
            5. UIView анимации, последовательность анимаций.
            6. Асинхронные операции и управление ими. Переписываем пример с анимациями.
            Читать дальше →
          • О блоках и их использовании в Objective-C часть 1-ая

              В OS X 10.6 и iOS 4.0 компания Apple анонсировала поддержку блоков, по сути являющиx собою замыкания. Дальше о блоках в контексте разработки под IOS, Objective-C (тоесть работа без gc).
              Для использования блоков IOS ver. < 4.0 можно применить ESBlockRuntime или PLBlocks.

              Кратко о теории


              Экземпляр блока, тип блока и сам блоковый литерал обозначаются с помощью оператора ^, пример:

              typedef int (^MyBlock)(int);

              int multiplier = 7;
              MyBlock myBlock = ^(int num) {
               return num * multiplier;
              };


              * This source code was highlighted with Source Code Highlighter.

              или

              int multiplier = 7;
              int (^myBlock)(int) = ^(int num) {
                return num * multiplier;
              };


              * This source code was highlighted with Source Code Highlighter.

              Вызов блока аналогичен вызову обычной сишной функции. Например, так:

              myBlock( 3 )

              * This source code was highlighted with Source Code Highlighter.

              Главной особенностью блоков является их умение хранить контекст в котором они создавались. В примере выше «myBlock» всегда будет умножать число на 7. Как же это все работает?
              Читать дальше →
            • Используем блоки в IOS < 4.0

                Для тех кто знаком с блоками в Objective-C, но не может пока их использовать в силу необходимости поддержки приложений для ios младше 4.0 версии, либо сторонится патченого компилера PLBlocks, предлагаю рантайм блоков в виде статической либы libESBlocksRuntime.a

                Сам рантайм был выдернут с исходников проекта compiler-rt, и завернут в блоковые классы ESBlock. Добавлены недостающие методы -[ NSArray enumerateObjectsUsingBlock: ] и т.д. также UIView блоковые екстеншены.

                Для подключения в проект достаточно скачать исходники проекта, и добавить его в dependencies например так.

                Вопросы и предложения пишите в личку — с радостью отвечу каждому заинтересовавшемуся.

                Здесь можно почитать о терии блоков на хабре.