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
компилятор
• Позволяет сосуществовать обоим
объектным моделям в одном файле
• Классы не взаимозаменяемые
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