В данном посте я хочу обратиться к теме, о которой многие начинающие iPhone-разработчики часто имеют смутное представление: Objective-C Runtime. Многие знают, что он существует, но каковы его возможности и как его использовать на практике?
Попробуем разобраться в базовых функциях этой библиотеки. Материал основан на лекциях, которые мы в Coalla используем для обучения сотрудников.
Читать полностью »
Метка «objective-c» - 7
Objective-C Runtime. Теория и практическое применение
2013-05-06 в 12:03, admin, рубрики: Cocoa, internals, iphone development, objective-c, osx, runtime, разработка под iOS, метки: Cocoa, internals, iphone development, objective-c, osx, runtimeEasyMapping, или Путешествие по JSON’у
2013-04-15 в 11:14, admin, рубрики: ios development, json, mobile development, objective-c, мобильная разработка, разработка под iOS, метки: ios development, json, mapping, objective-c, мобильная разработкаComputer programs are the most complex things that humans make. It is also the nature of software to be extensively modified over its productive life. If we can read and understand it, then we can hope to modify and improve it.
© Douglas Crockford, автор спецификации JSON
JSON — это мост между двумя мирами: миром веб-сервисов и миром клиентских приложений. Однако мост не настолько совершенен, чтобы данные существовали в одном формате. Пока что мы всегда вынуждены преобразовывать информацию в представление того языка, с которым работаем, для архитектуры того приложения, которое пишем. Для того чтобы такое преобразование было успешным, оно должно быть в первую очередь простым.
Есть много способов превращения JSON в Objective-C обьекты, однако многие из них имеют свои недостатки, которые мешают с ними работать. Есть известный и любимый многими RestKit, однако он, к сожалению, эффективно работает только при наличии идеального REST API. Шаг в сторону — и вы будете забивать гвозди микроскопом, не понимая, зачем нужно писать такие сложные конструкции для достаточно простых вещей. Есть решение от разработчиков GitHub — Mantle, однако с ним вы будете вынуждены наследоваться от базового класса Mantle и постоянно использовать NSValueTransformer — не самую популярную технологию в iOS/Mac OS разработке.
Я хочу рассказать о фреймворке, который недавно нашелся на просторах GitHub, и который позволяет достаточно просто и красиво преобразовывать JSON в Objective-C обьекты — EasyMapping.
Если заинтересовались, добро пожаловать под кат!
Читать полностью »
Open Source: Пишем бота для биржи BTC-E
2013-04-06 в 12:00, admin, рубрики: bitcoin, litecoin, objective-c, open source, биржа, заработок, криптовалюта, Финансы для всех, электронная коммерция, метки: bitcoin, litecoin, objective-c, open source, биржа, заработок, криптовалюта
Добрый день, дорогой %username%!
Совсем недавно я узнал про такую замечательную вещь, как биткоин. Не секрет, что последние 2-3 месяца наблюдался бурный рост этой криптовалюты. Казалось бы, ну есть у нас криптовалюта, а сбывать ее где? После моего предыдущего поста у меня появилось несколько лайткоинов. Естественно, я начал думать о способе сбыта легкой криптовалюты. Немного погуглив, я набрел на биржу BTC-E и, о великий котэ, увидел заветную кнопочку «Trade API».
С этого момента судьба следующих пары-тройки дней для меня была предопределена — я загорелся идеей воспользоваться этим самым API и сделать миллионы грязных долларов написать бота, который автоматически бы сбывал и покупал ресурсы. А так как я fully proficient (взято с моего профиля на elance.com) в Objective C, на нем я писать и буду.
Три дня прошло, и я все-таки осилил API. Зачем я выкладываю все это в открытый доступ? Что же, на это есть ряд причин:
- Пора уже начинать делать что-то open source
- Нужно популяризировать криптовалюту
- Логики в моем «наброске» очень мало, так что алгоритмы куплипродажи заинтересованному придется писать самостоятельно
- Мне банально нужен человек, финансист, который наглядно объяснит какими путями нужно идти. Возможно, даже согласится работать вместе
Внимание! Под катом разбор основных моментов работы с API; подводные камни, о которые мне пришлось споткнуться; исходники.
Читать полностью »
Блоки в Objective-C
2013-04-04 в 8:53, admin, рубрики: objective-c, Блог компании e-Legion Ltd., блоки, разработка под iOS, метки: objective-c, блокиВ этом небольшом 15-минутном видео Юра Digal Буянов (ведущий iOS-разработчик e-Legion) расскажет о тонкостях работы с блоками в Objective-C.
Мы решили сделать целый ряд коротких видео о разработке (не только мобильной), дизайне и маркетинге. Чтобы не пропустить выход новых материалов, вы можете подписаться на Хабра-блог или на youtube-канал.
AppCode 2. Сделан как надо
2013-03-20 в 18:18, admin, рубрики: appcode, IDE, ios development, objective-c, xcode, Блог компании JetBrains, метки: appcode, IDE, ios development, objective-c, xcodeМы рады сообщить, что сегодня официально стал доступен AppCode 2.0. В этот релиз мы добавили поддержку популярного фреймворка для тестирования Kiwi. В новый AppCode интегрированы два внешних браузера документации Dash и Ingredients.
AppCode не был бы самим собой, если бы не приобрел целую пачку “умных” фич, среди которых: новые рефакторинги, расширенные возможности генерации кода, улучшенная поддержка написания кода и его анализа, а также многое другое. Читать полностью »
RestKit — описание одной из возможностей
2013-03-11 в 7:58, admin, рубрики: apple, iOS, mac os, objective-c, rest, RESTful, Песочница, метки: iOS, mac os, objective-c, rest, RESTfulПредыстория
Давно заметил, что на хабре нет ни одной статье о такой замечательной библиотеке как RestKit, написанной на Objective-C и предоставляющая прекрасные возможности для работы с RESTful-сервисами. Поэтому и пришла идея опубликовать краткое описание некоторых возможностей библиотеки, тем более что уже вышла совершенно новая её версия использующая за основу AFNetworking библиотеку для работы с HTTP. В статье описывается одна из важнейших для меня функциональностей — маппинг объектов.Читать полностью »
Инструменты студии мобильной разработки
2013-02-27 в 11:58, admin, рубрики: android, iOS, java, location, objective-c, push, аналитика, дизайн, мокапы, Разработка под android, разработка под iOS, сервер, метки: android, iOS, java, location, objective-c, push, аналитика, дизайн, мокапы, сервер
Для разработчиков мобильных приложений существует много сервисов и веб-инструментов. Продвинутые компании и разработчики-одиночки знакомы со всеми этими сервисами не понаслышке. А вот новичок может запутаться и сделать неправильный выбор. Перейти на другой сервис можно без проблем, но ведь классно с самого начала пользоваться лучшим и удобным.
В нашей компании используется много подобных сервисов и инструментов, поэтому я решил рассказать вам кратко о лучших из них. О базовых вещах на подобии Basecamp, GitHub и т.п. речи не будет, т.к. это не сугубо специфические вещи для мобильной разработки.
Пройдемся по дизайну, серверным решениям, тестированию и аналитике.
Читать полностью »
Анонимные классы в Objective-C
2013-02-22 в 17:09, admin, рубрики: java, method, objective-c, override, разработка под iOS, хочется странного, метки: java, method, objective-c, override, хочется странногоДаная статья является продолжением «Переопределение реализации метода. Вдохновленный Java'ой». В предыдущей заметке было предложено слишком уж кривое решение, оставлять в таком виде не хотелось и было принято волевое решение довести свое начинание до логического завершения и сделать все «как надо». Хотя вопрос нужности такого функционала в Objective-C до сих пор открыт.
Итак, продолжаем быть похожими на Java
Читать полностью »
Переопределение реализации метода. Вдохновленный Java’ой
2013-02-15 в 3:08, admin, рубрики: fun, imp, method, objective-c, override, runtime, разработка под iOS, метки: fun, imp, method, objective-c, override, runtimeВступление
Изучая основы разработки под Android мне пришлось познакомится с таким замечательным языком, как Java. Читая очередной раздел гугловского GetStarted я наткнулся на такую конструкцию:
Button.OnClickListener mTakePicSOnClickListener =
new Button.OnClickListener() {
@Override
public void onClick(View v) {
}
};
Объявление представителя OnClickListener и переопределения у него метода onClick (поправьте меня Java программисты). Хм, подумал я, а круто бы эту фичу поиметь в Objective-C, а именно возможность переопределять реализацию метода у объекта(конкретного объекта, а не реализацию метода для всех объектов класса) да еще и через блоки в runtime (!) и забыл о этом всем… пока не оказался в полупустом автобусе в дождливую погоду. Времени было много и я решил поразмыслить над тем, что же тут можно сделать.
Зачем это нужно было? Изначально хотелось уметь делать так:
tableView1.delegate = [[NSObject new] override:@selector(tableView:didDeselectRowAtIndexPath:) imp:^void(NSIndexPath* ip){
NSLog(@"selected row %i", ip.row);
}]
tableView2.delegate = [[NSObject new] override:@selector(tableView:didDeselectRowAtIndexPath:) imp:^void(NSIndexPath* ip){
NSLog(@"selected row %i", ip.row);
}]
Обратите внимание, что предполагается изменение именно делегата и добавление/предопределение методов у него. А tableView остается оригинальным, без каких либо изменений.
Тем самым местом я чувствовал, что это вполне реализуемо благодаря богатому внутреннему миру Objective-C Runtime.
И да, то самое место меня не подвело.
Читать полностью »
Objective C. Практика. События и «мертвые» объекты
2013-02-04 в 9:23, admin, рубрики: event handling, Events, обработка событий, события, метки: event handling, Events, objective-c, обработка событий, событияМногие, вероятно, знают, что при работе с событиями изменения свойств с помощью key-value observing существует очень удобный механизм, предотвращающий появление в приложении «метрвых» объектов, которые представляют собой получателей вызовов. В действительности, первый же мертвый объект «валит» приложение, при поступлении ему события — это закономерно, так как объект уже не существует и никаких методов вызвать у него уже не получится.
Поиск таких объектов мог быть затруднен, если бы не замечательная в отладке вещь под названием NSKVODeallocateBreak
, которая позволяет прервать выполнение приложения в момент, когда уничтожается объект, подписанный на события, чтобы отследить время его жизни и убрать проблему.
В процессе работы над классом, который я использовал для событий, мне захотелось создать аналогичный механизм, так как ошибки в событийной логике довольно сложно прогнозировать, и страховка здесь не помешает.
Данная статья рассчитана на разработчиков, имеющих опыт работы с платформой и знающих, каким образом определяется жизненный цикл объекта. Если у вас есть определенные пробелы в этой области (а я неоднократно встречал даже опытных разработчиков, которые не знают, каким образом работает счетчик ссылок и не представляющих, во что разворачивается @synthesize
), то вы можете прочитать мою старую статью, посвященную исследованию данного вопроса. Остальных прошу к столу.