Pull to refresh
  • by relevance
  • by date
  • by rating

Используем блоки в IOS < 4.0

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

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

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

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

Здесь можно почитать о терии блоков на хабре.
Total votes 28: ↑23 and ↓5 +18
Views 970
Comments 14

О блоках и их использовании в Objective-C часть 1-ая

Development for iOS *
В 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. Как же это все работает?
Читать дальше →
Total votes 16: ↑12 and ↓4 +8
Views 32K
Comments 12

Пишем оповещение для iOS

Development for iOS *
Доброе утро/день/вечер/ночь %username%!

Предыстория

В процессе реализации очередного проекта появилась необходимость реализовать эффективное оповещение пользователя о чём-либо (например, об отсутствии интернет соединения). Так как же это сделать? Стандартный класс UIAlertView оказался для этой цели слишком громоздким и скучным, и, не найдя более ничего подходящего, было решено написать своё казино с блекдже… свой класс оповещения.
Читать дальше →
Total votes 34: ↑29 and ↓5 +24
Views 2.1K
Comments 11

О блоках и их использовании в Objective-C часть 2-ая

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

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

Содержание:


1. Работа с контейнерами на примере NSArray.
2. Guards на примере UITableView.
3. Использование блоков вместо классов на примере scheduled операций.
4. Блоки вместо делегатов в UIAlertView.
5. UIView анимации, последовательность анимаций.
6. Асинхронные операции и управление ими. Переписываем пример с анимациями.
Читать дальше →
Total votes 36: ↑32 and ↓4 +28
Views 9.2K
Comments 21

О блоках и их использовании в Objective-C часть 3-ая

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

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

Для начала напишем простенький пример, в котором мы будем двигать кнопку с помощью анимаций(без блоков). Затем поменяем порядок анимаций чтобы посмотреть, какие изменения потребуются в коде.
Читать дальше →
Total votes 12: ↑12 and ↓0 +12
Views 4.3K
Comments 9

Qt/Objective-C++11 или сборка Qt-проекта с помощью GCC-4.7 и Clang

Programming *Qt *Development for MacOS *
Tutorial
Всем доброго хабрадня!

Сегодня я расскажу уважаемым хабражителям об очередном извращении — о сборке проекта, написанного на Qt, под Mac OS X компилятором GCC-4.7.0 с примесью Clang'а (про шланг — в конце статьи, там станет понятно, зачем ещё и его приплетать будем).

Для чего нам GCC 4.7? Ну, например, чтобы использовать все те крутые фичи из стандарта C++11. Разве этого мало? Кроме поддержки нового стандарта, в нём очень много улучшений по сравнению с идущим в комплекте с Xcode GCC 4.2 (хотя он и оказывается на поверку i686-apple-darwin11-llvm-g++-4.2), так что смысл в переходе на 4.7 явно имеется. Но и проблемы присутствуют, о чём ниже.

Мы можем предположить, что нам потребуются некие фичи из Cocoa, а значит, нам потребуется компилятор Objcetive-C, а ещё лучше — Objective-C++, чтобы, например, интегрировать наше Qt-приложение в окружение Mac OS X.
Начнем!
Total votes 41: ↑34 and ↓7 +27
Views 11K
Comments 66

Простой мокинг запросов к серверу + unit-тестирование блоковых коллбэков в Objective-C

Development for iOS *
Tutorial
Зачем

1. Зачем подменять ответ сервера?
Я всегда был и буду сторонником подхода, когда каждый отвечает за свою доменную область. И скажем, если сервер с API сломался, то обнаружить это должны юнит-тесты бэк-енда, а не свалившиеся тесты моего iOS-приложения.

2. Зачем использовать блоки, почему не target-action, делегирование и так далее?
Это личное предпочтение каждого, почти во всех ситуациях разрабатываемые мной объекты будут иметь блоковые коллбэки а не вызывать методы делегата. Для меня это работает и особых проблем с этим подходом я не испытал. В конце концов, блоки — это стильно, модно, молодежно!

Читать дальше →
Total votes 14: ↑13 and ↓1 +12
Views 6.8K
Comments 12

Проект Blocks: модульные «умные» устройства своими руками

Gadgets Smartphones Smart House


На Хабре уже несколько раз упоминался проект по созданию модульного смартфона от Google, проект с названием Project ARA. В общем-то, идея весьма интересная, и корпорация Google собирается предоставить первые такие смартфоны уже в 2015 году.

Но что, если пойти дальше, и подумать о модульности других устройств, например, носимой электроники, которая сейчас входит в новую фазу развития? «Умные» часы, браслеты и все прочее — эти устройства тоже могут быть модульными. И проект Project ARA является «родственником» проекта Blocks.

Читать дальше →
Total votes 30: ↑22 and ↓8 +14
Views 11K
Comments 10

Продвинутые перечисления с Ruby

Ruby *Programming *Ruby on Rails *ООP *
Translation
Перечисления (enumeration) по определению это — «действие упоминания некоторого количества чего-либо один за одним». В программировании, вместо упоминания, мы выбираем любое действие, которое хотим произвести, будь то простой вывод на монитор или выполнение некоторого рода выборки и/или преобразования над элементом.

В программировании, у нас есть много способов делать выборку и обработку коллекции за единицу времени, путем добавления в цепочку дополнительной функции трансформации на каждом шаге. И каждый шаг, может как потреблять целиком всю коллекцию перед тем как передать результаты обработки следующем шагу, или он может обрабатывать коллекцию «лениво», передавая один или более элементов коллекции через все шаги преобразований.
Читать дальше →
Total votes 14: ↑13 and ↓1 +12
Views 14K
Comments 0

Проект модульных часов Blocks наконец вышел на Kickstarter

Gadgets Crowdsourcing Wearable electronics


После двух лет разработки проект умных часов с модульным ремешком вышел на платформу Кикстартер для сбора средств на запуск производства. Стоимость устройства для жертвователей начинается от $195. Кампания за три дня уже набрала необходимую сумму.

Британский проект Blocks впервые заявил о себе весной 2014 года. Старт проект получил, выиграв ежегодный конкурсе от Intel «Make it Wearable», в котором соревнуются авторы носимых электронных устройств. Команда не потратила денег зря, и выдала хорошо проработанную концепцию устройства вместе с рабочим прототипом.

Первоначально планировалось, что краудфандинговая кампания начнётся летом 2015-го года, но непредвиденные задержки, обычные в таких сложных проектах, отодвинули её старт на октябрь. Сегодня идёт третий день кампании, который уже принёс команде разработчиков $370 тысяч (при $250 тысячах запрошенных). Сложно сказать, побьёт ли кампания рекордные цифры, набранные «умными» часами Pebble, но в любом случае сумма явно получится внушительной.
Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Views 9K
Comments 14

Модульные часы Blocks будут поддерживать работу с сетью AT&T и дактилоскопические модули

Gadgets Computer hardware Periphery Wearable electronics


Часы Blocks — первые в мире модульные умные часы, функциональность и возможности которых пользователь может менять самостоятельно. Для этого нужно лишь добавлять или заменять модули, составляющие ремешок часов. Сейчас разработчики Blocks предоставили дополнительную информацию о своем устройстве, и выглядит все это довольно привлекательно.

Так, Blocks представили новые модули, включая сотовые элементы, поддерживающие работу сетей оператора связи AT&T. Кроме того, добавлены и модули с пульсометром, дактилоскопический модуль, равно как и некоторые другие жлементы.
Читать дальше →
Total votes 6: ↑6 and ↓0 +6
Views 4.3K
Comments 7