Slide 1

Slide 1 text

Cocoa & Cocoa Touch Fast and Effective Development Vladimir Pouzanov CTO at Codeneedle Vladimir Kirillov Ukrainian OpenBSD Users Group

Slide 2

Slide 2 text

Objective-C • Объектно-ориентированный язык • Произошел от C и SmallTalk • Objective-C++ для упрощения миграции ПО • Компиляторы: GCC, LLVM/clang

Slide 3

Slide 3 text

Особенности языка • Классы – это объекты • Функционал языка реализован в рантайме • нет таких возможностей, как перегрузка операторов • синтаксические особенности языка превращаются в вызовы Си-функций с указателями в качестве аргументов • Динамическая типизация

Slide 4

Slide 4 text

Objective-C Runtime ООП основан на передаче сообщений (SmallTalk) Вызов методов (C++): myObj->doSomething( std::static_cast<::MyNamespace::MyClass*>(anything)) Передача сообщений (Objective-C): [myObj doSomething:anything] Уровень рантайма: id obj_msgSend(id self, SEL _cmd, /* args */ ...)

Slide 5

Slide 5 text

Objective-C Runtime Динамическая типизация id – указатель на любой объект [myObject class] – возвращает класс объекта id res = [myObj myMethod]; SEL s = NSSelectorFromString(@"myMethod"); id res = [myObj makeObjectPerformSelector:s];

Slide 6

Slide 6 text

Objective-C Runtime • Категории • расширение функционала любых классов • Подмена методов (swizzling) • во время выполнения • Runtime C API magic...

Slide 7

Slide 7 text

Blocks • Mac OS X 10.6 и прочие (с помощью PLBlocks) • Анонимные функции • Хранятся в текущем стеке, имеют доступ к контексту и локальным переменным • Упрощают написание callback-функций

Slide 8

Slide 8 text

Objective-C++ • Совмещенный C++/Objective-C компилятор • Позволяет сосуществовать обоим объектным моделям в одном файле • Классы не взаимозаменяемые

Slide 9

Slide 9 text

Hello World #import int main(int argc, char *argv[]) { " NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; " NSLog(@"Hello, %@ world, %s!", @"Objective-C", argv[1]); " [pool drain]; " return 0; }

Slide 10

Slide 10 text

Cocoa & Cocoa Touch • Большой набор API на все случаи жизни (Foundation) • Широкий набор классов для интерфейсов (AppKit, UIKit) • Различные API для решения других задач (CoreData, CoreGraphics, CoreAudio, Security, и т.д.)

Slide 11

Slide 11 text

Cocoa & Cocoa Touch Cocoa Cocoa Touch Сервер UI-библиотека Контекст отображения Покрытие API WindowServer SpringBoard AppKit UIKit зависит от приложения слои CoreAnimation полное ограниченное

Slide 12

Slide 12 text

Foundation • Эффективно реализованные классы общего назначения, коллекции: • NSString • NSArray • NSDictionary • NSSet

Slide 13

Slide 13 text

Foundation • Программирование на базе полей, и наблюдение за полями (KVC & KVO): • непрямой механизм доступа к свойствам объекта или дерева объектов • [myDict valueForKeyPath:@”object.prop1.prop2”] • Аггрегационные функции: • [savingsAccount valueForKeyPath: @"[email protected]"]

Slide 14

Slide 14 text

Key-Value Observing SomeClass @property int count ObservingClass -observeValueForKeyPath: ofObject:change:context:

Slide 15

Slide 15 text

Notification Center • Простой метод для IPC • Уведомления передаются как в пределах приложения (NSNotificationCenter) • так и по всей системе (NSDistributedNotificationCenter)

Slide 16

Slide 16 text

Distributed Objects • Вызов методов у объектов в других процессах, на других машинах • “Родной” для Cocoa механизм RPC • theProxy = [[NSConnection rootProxyForConnectionWithRegisteredName: @"com.some.server" host:nil] retain]; • [theProxy getRemoteValForKey:123];

Slide 17

Slide 17 text

Distributed Objects Client Server MyObject -myMethod: MyProxy (для MyObject) -myMethod:

Slide 18

Slide 18 text

Хранение и передача данных • XML (event-driven, plist) • NSCoding • SQLite • CoreData

Slide 19

Slide 19 text

Расширение стандартного API • DDXML • PLBlocks • Google Toolbox for Mac (and iPhone)

Slide 20

Slide 20 text

Cocoa-like • GNUstep – FOSS-аналог OpenStep • Cocotron – open source реализация Cocoa • Cappuccino – Cocoa для Web-приложений

Slide 21

Slide 21 text

Выводы • Удобная интеграция • Единообразие API • Продвинутые средства разработки • Open Source комьюнити, сторонние проекты (Cocotron, ...)

Slide 22

Slide 22 text

Спасибо за внимание! Вопросы? Комментарии? Vladimir Pouzanov [email protected] Vladimir Kirillov [email protected] @farcaller @darkproger