Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cocoa & Cocoa Touch: Fast and Effective Development

Cocoa & Cocoa Touch: Fast and Effective Development

Abc432bb0450574a25b15ff23d399d5a?s=128

Vladimir Pouzanov

December 05, 2009
Tweet

Transcript

  1. Cocoa & Cocoa Touch Fast and Effective Development Vladimir Pouzanov

    CTO at Codeneedle Vladimir Kirillov Ukrainian OpenBSD Users Group
  2. Objective-C • Объектно-ориентированный язык • Произошел от C и SmallTalk

    • Objective-C++ для упрощения миграции ПО • Компиляторы: GCC, LLVM/clang
  3. Особенности языка • Классы – это объекты • Функционал языка

    реализован в рантайме • нет таких возможностей, как перегрузка операторов • синтаксические особенности языка превращаются в вызовы Си-функций с указателями в качестве аргументов • Динамическая типизация
  4. 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 */ ...)
  5. Objective-C Runtime Динамическая типизация id – указатель на любой объект

    [myObject class] – возвращает класс объекта id res = [myObj myMethod]; SEL s = NSSelectorFromString(@"myMethod"); id res = [myObj makeObjectPerformSelector:s];
  6. Objective-C Runtime • Категории • расширение функционала любых классов •

    Подмена методов (swizzling) • во время выполнения • Runtime C API magic...
  7. Blocks • Mac OS X 10.6 и прочие (с помощью

    PLBlocks) • Анонимные функции • Хранятся в текущем стеке, имеют доступ к контексту и локальным переменным • Упрощают написание callback-функций
  8. Objective-C++ • Совмещенный C++/Objective-C компилятор • Позволяет сосуществовать обоим объектным

    моделям в одном файле • Классы не взаимозаменяемые
  9. Hello World #import <Foundation/Foundation.h> int main(int argc, char *argv[]) {

    " NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; " NSLog(@"Hello, %@ world, %s!", @"Objective-C", argv[1]); " [pool drain]; " return 0; }
  10. Cocoa & Cocoa Touch • Большой набор API на все

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

    отображения Покрытие API WindowServer SpringBoard AppKit UIKit зависит от приложения слои CoreAnimation полное ограниченное
  12. Foundation • Эффективно реализованные классы общего назначения, коллекции: • NSString

    • NSArray • NSDictionary • NSSet
  13. Foundation • Программирование на базе полей, и наблюдение за полями

    (KVC & KVO): • непрямой механизм доступа к свойствам объекта или дерева объектов • [myDict valueForKeyPath:@”object.prop1.prop2”] • Аггрегационные функции: • [savingsAccount valueForKeyPath: @"transactions.@max.date"]
  14. Key-Value Observing SomeClass @property int count ObservingClass -observeValueForKeyPath: ofObject:change:context:

  15. Notification Center • Простой метод для IPC • Уведомления передаются

    как в пределах приложения (NSNotificationCenter) • так и по всей системе (NSDistributedNotificationCenter)
  16. Distributed Objects • Вызов методов у объектов в других процессах,

    на других машинах • “Родной” для Cocoa механизм RPC • theProxy = [[NSConnection rootProxyForConnectionWithRegisteredName: @"com.some.server" host:nil] retain]; • [theProxy getRemoteValForKey:123];
  17. Distributed Objects Client Server MyObject -myMethod: MyProxy (для MyObject) -myMethod:

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

    • SQLite • CoreData
  19. Расширение стандартного API • DDXML • PLBlocks • Google Toolbox

    for Mac (and iPhone)
  20. Cocoa-like • GNUstep – FOSS-аналог OpenStep • Cocotron – open

    source реализация Cocoa • Cappuccino – Cocoa для Web-приложений
  21. Выводы • Удобная интеграция • Единообразие API • Продвинутые средства

    разработки • Open Source комьюнити, сторонние проекты (Cocotron, ...)
  22. Спасибо за внимание! Вопросы? Комментарии? Vladimir Pouzanov farcaller@gmail.com Vladimir Kirillov

    proger@uaoug.org.ua @farcaller @darkproger