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

Vladimir Pouzanov

December 05, 2009
Tweet

More Decks by Vladimir Pouzanov

Other Decks in Programming

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. 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; }
  9. Cocoa & Cocoa Touch • Большой набор API на все

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

    отображения Покрытие API WindowServer SpringBoard AppKit UIKit зависит от приложения слои CoreAnimation полное ограниченное
  11. Foundation • Программирование на базе полей, и наблюдение за полями

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

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

    на других машинах • “Родной” для Cocoa механизм RPC • theProxy = [[NSConnection rootProxyForConnectionWithRegisteredName: @"com.some.server" host:nil] retain]; • [theProxy getRemoteValForKey:123];
  14. Cocoa-like • GNUstep – FOSS-аналог OpenStep • Cocotron – open

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

    разработки • Open Source комьюнити, сторонние проекты (Cocotron, ...)