SlideShare une entreprise Scribd logo
1  sur  99
Фундаментальные
основы разработки
     под iOS
Разработка под iOS

Национальная забава –
бег по полю с граблями
Разработка под iOS
•   Инструменты
•   Основные типы данных
•   Управление памятью
•   UIKit (UIView + UIViewController + UI..)
                            ∞
•   Жизненный цикл приложения
•   Фундаментальные шаблоны в iOS
Инструменты


Xcode   Interface Builder iOS Simulator




          Instruments
Xcode
Xcode
•   Основная среда разработки
•   Обновляется не особо часто
•   Желателен большой экран
•   Последняя версия Xcode 4.2.1 (4.3b)
•   Развивается в странную сторону ;)
•   Есть альтернативы, но они не могут
    полностью заменить Xcode
Interface Builder
Interface Builder
•   WYSIWYG редактор в Xcode
•   Позволяет делать быстрое
    прототипирование
•   Встроен в Xcode
•   Позволяет отвязать представление от
    кода
•   Желателен большой экран
•   В паре с Xcode использует много
    памяти
iOS Simulator
iOS Simulator

•   Незаменим для разработки
•   Использует ресурсы компьютера
•   Позволяет эмулировать различные
    внешние воздействия
•   И все же, не физическое устройство
Instruments
Instruments
•   Показывют события приложения
•   Загрузка CPU, Объем памяти, Сетевая
    Активность, Утечки памяти, Расход
    батареи, UI Automation
•   И многое многое другое
•   Помогает там, где другие инструменты
    бессильны
http://en.wikipedia.org/wiki/Objective-C




Objective-C
Типы данных
•   Ну ооочень много
•   Типы данных из C никуда не делись
•   Есть и Objective-C (просто typedef)
      int              NSInteger
      float            NSUInteger
      bool             CGFloat
      double           ...
      char
      ...
Структуры
Только базовые, которые понадобятся при
              разработке
CGPoint      // x,y

CGSize       // width, height

CGRect       // origin(CGPoint)
             // size(CGSize)

UIEdgeInsets // top, left, bottom, right
Структуры
Для структур - чаще всего есть целая туча
                C-функций
CGPointMake(CGFloat x, CGFloat y)
CGSizeMake(CGFloat width, CGFloat height)

CGRectMake( ... )
CGRectContainsPoint( ... )
CGRectIntersection( ... )
CGRectInset( ... )
Класс
                Интерфейс
@interface SHAppDelegate : UIResponder   {
   Facebook *_facebook;
}

@property (strong) UIWindow *window;
@property (strong) Facebook *facebook;

+ (void)classCoolMethod:(id)params;
- (void)myCoolMethod:(id)params;

@end
Класс
                   Имя
@interface SHAppDelegate : UIResponder   {
   Facebook *_facebook;
}

@property (strong) UIWindow *window;
@property (strong) Facebook *facebook;

+ (void)classCoolMethod:(id)params;
- (void)myCoolMethod:(id)params;

@end
Класс
                 Родитель
@interface SHAppDelegate : UIResponder   {
   Facebook *_facebook;
}

@property (strong) UIWindow *window;
@property (strong) Facebook *facebook;

+ (void)classCoolMethod:(id)params;
- (void)myCoolMethod:(id)params;

@end
Класс
         Внутренние переменные
@interface SHAppDelegate : UIResponder   {
   Facebook *_facebook;
}

@property (strong) UIWindow *window;
@property (strong) Facebook *facebook;

+ (void)classCoolMethod:(id)params;
- (void)myCoolMethod:(id)params;

@end
Класс
                 Свойства
@interface SHAppDelegate : UIResponder   {
   Facebook *_facebook;
}

@property (strong) UIWindow *window;
@property (strong) Facebook *facebook;

+ (void)classCoolMethod:(id)params;
- (void)myCoolMethod:(id)params;

@end
Класс
                  Методы
@interface SHAppDelegate : UIResponder   {
   Facebook *_facebook;
}

@property (strong) UIWindow *window;
@property (strong) Facebook *facebook;

+ (void)classCoolMethod:(id)params;
- (void)myCoolMethod:(id)params;

@end
Класс
        Имплементация (Реализация)
@implementation SHAppDelegate

@synthesize window = _window;
@synthesize facebook = _facebook;

- (void)myCoolMethod:(id)params {
  NSLog(@"Hell'O World");
}

@end
Класс
             Генерация свойств
@implementation SHAppDelegate

@synthesize window = _window;
@synthesize facebook = _facebook;

- (void)myCoolMethod:(id)params {
  NSLog(@"Hell'O World");
}

@end
Класс
            Реализация методов
@implementation SHAppDelegate

@synthesize window = _window;
@synthesize facebook = _facebook;

- (void)myCoolMethod:(id)params {
  NSLog(@"Hell'O World");
}

@end
Протоколы
@protocol MyFriend

- (void)beHonest;
- (void)listenToMe;

@optional

- (void)haveMoney;

@end
Протоколы
            Обязательные методы
@protocol MyFriend

- (void)beHonest;
- (void)listenToMe;

@optional

- (void)haveMoney;

@end
Протоколы
            Опциональные методы
@protocol MyFriend

- (void)beHonest;
- (void)listenToMe;

@optional

- (void)haveMoney;

@end
Категории
@interface NSString (MD5)

 - (NSString*)md5Hash;

@end

@implementation NSString (MD5)

- (NSString*)md5Hash {
  return @"Not implemented yet";
}

@end
Отсылка
сообщения
[object message];


[Class message];
Отсылка сообщения c
      параметрами
User * someUser = [User createUser];

[helper helpUser:someUser];

[helper helpUser:someUser
         withLab:@"23"];
Вложенные вызовы
NSArray * arr =
  [NSArray arrayWithObject:
     [NSArray arrayWithObject:
         [User createUser]
     ]
  ];

[[[NSArray alloc] init] autorelease]
Методы или
селекторы?
Методы или
       селекторы?
SEL sel = @selector(addObject:);
NSMutableArray * arr =
  [NSMutable array];

[arr performSelector:sel
          withObject:@"Cool"];

[arr addObject:@"Cool"];
Методы или
       селекторы?
Селектор - это просто имя
SEL sel = @selector(addObject:);

Его можно создать на этапе выполнения
SEL sel =
NSSelectorFromString(@"addObject:");
Методы или
        селекторы?
Метод - это скомпилированный код

- (void)myCoolMethod:(id)params {
  NSLog(@"Hell'O World");
}

Чаще всего название метода и селектор, при
помощи которого он вызывается, совпадают
Методы или
         селекторы?
Метод всегда знает про селектор, при
помощи которого он был вызван

- (void)myCoolMethod:(id)params {
  // Почти всегда
  // Здесь будет выведено
  // myCoolMethod:
  NSLog(NSStringFromSelector(_cmd));
}
Методы или
       селекторы?
Если нету никакого контекста, то можно
      для простоты считать, что


  Метод == Селектор
Свойства
(Properties)
Properties
@interface MyObj : UIResponder   {
   Facebook *_facebook;
}

@property (retain) UIWindow *window;
@property (copy) Facebook *facebook;

+ (void)classCoolMethod:(id)params;
- (void)myCoolMethod:(id)params;

@end
Properties
@implementation MyObj

@synthesize window = _window;
@synthesize facebook = _facebook;

@end
Properties
                  Getters
@synthesize window = _window;
@synthesize facebook = _facebook;

MyObj * obj = [[MyObj alloc] init];
UIWindow * wnd;

wnd = obj.window;
wnd = [obj window];
Properties
                  Setters
@synthesize window = _window;
@synthesize facebook = _facebook;

MyObj * obj = [[MyObj alloc] init];
UIWindow * wnd = nil;

obj.window = wnd;
[obj setWindow:wnd];
Properties
               Direct Access
@synthesize window = _window;
@synthesize facebook = _facebook;

MyObj * obj = [[MyObj alloc] init];
UIWindow * wnd = nil;

wnd = obj->window;
obj->window = wnd;
   Зачем на свойства           ?
Properties
              Overriden Getter
@synthesize window = _window;
@synthesize facebook = _facebook;


- (UIWindow * )window {
  NSLog(@"Кто-то вызвал getter");
    return _window;
}
Properties
              Overriden Setter
@synthesize window = _window;
@synthesize facebook = _facebook;

- (void)setWindow:(UIWindow*)w {
  if (w != nil) {
     _window = w;
  } else {
    NSLog(@"Не-не-не, Д.Б.!");
  }
}
Properties
              Overriden Setter
@synthesize window = _window;
@synthesize facebook = _facebook;

- (void)setWindow:(UIWindow*)w {
  if (w != nil) {        Только с
     _window = w;
  } else {                  ARC
    NSLog(@"Не-не-не, Д.Б.!");
  }
}
ARC?
 О_о
Работа с памятью
    Memory
  management
Работа с памятью
          Это просто!
            releas      autoreleas
 retain        e            e



                     alloc
           copy                  new
 deallo
   c
Работа с памятью
• Объект живет, если на него есть хоть
одна ссылка
• На каждый объект может быть
несколько ссылок
• Как только количество ссылок на
объект равно нулю, он удаляется из
памяти
Работа с памятью
      Жизнь замечательных объектов



alloc

                       Создание
                   в ручном режиме
new
Работа с памятью
      Жизнь замечательных объектов



alloc            release

                                 Жизнь
                      autorele
             retain
                        ase
new
                  copy
Работа с памятью
      Жизнь замечательных объектов



alloc            release


                                      dealloc
                      autorele
             retain
                        ase
new
                                   Уничтожение
                  copy
                                 "автоматически"
Работа с памятью
   Жизнь замечательных объектов
Вызывать метод dealloc в ручную,
           нельзя!

 Если вы, все же, это сделали, то
  перечитайте еще раз Memory
          Management.
Работа с памятью
  Жизнь замечательных объектов
 Метод     Изменение Количество
   alloc      +1         1
   new        +1         1
   copy       +1*        ∞
  retain      +1         ∞
  release     -1         ∞
autorelease   -1*        ∞
  dealloc     0          1
Работа с памятью
               Создание
 Метод        Изменение   Количество
   alloc         +1           1
   new           +1           1
   copy          +1*          ∞
  retain         +1           ∞
  release        -1           ∞
autorelease      -1*          ∞
  dealloc         0           1
Работа с памятью
                Жизнь
 Метод        Изменение   Количество
   alloc         +1           1
   new           +1           1
   copy          +1*          ∞
  retain         +1           ∞
  release        -1           ∞
autorelease      -1*          ∞
  dealloc         0           1
Работа с памятью
  Жизнь замечательных объектов
 Метод     Изменение Количество
   alloc      +1         1
   new        +1         1
   copy       +1*        ∞
  retain      +1         ∞
  release     -1         ∞
autorelease   -1*        ∞
  dealloc     0          1
Работа с памятью
    Жизнь замечательных объектов
Балансируем вызовы методов, которые
  увеличивают количество ссылок, и
           уменьшают их.

      +1+1+1-1-1+1-1-1+1-1 = 0
Работа с памятью
Жизнь замечательных объектов




Делаем это только в
  СВОЕМ КОДЕ
Работа с памятью
   Жизнь замечательных объектов



Если все делаем правильно, то у нас
   всегда будет хватать памяти
Работа с памятью
     Жизнь замечательных объектов
  Не вызывать методов - тоже баланс :)

- (void)setWindow:(UIWindow*)w {
  if (w != nil) {
     _window = w;
  } else {
    NSLog(@"Не-не-не, Д.Б.!");
  }
}
Работа с памятью
     Жизнь замечательных объектов
         А теперь по честному

- (void)setWindow:(UIWindow*)w {
  [_window autorelease];
  _window = [w retain];
}
Работа с памятью
     Жизнь замечательных объектов
         А теперь по честному

- (void)setWindow:(UIWindow*)w {
  [_window autorelease];
  _window = [w retain];
}
- (void)dealloc {
  [_window release];
  [super dealloc];
}
Работа с памятью
     Жизнь замечательных объектов
          И еще один пример

UIView * v =
[[[UIView alloc] init] autorelease];

UIView * v2 = [[UIView alloc] init];
[v addSubView:v2];
[v2 release];
Работа с памятью
     Жизнь замечательных объектов
          И еще один пример
UIView * v =
[[[UIView alloc] init] autorelease];

UIView * v2 = [[UIView alloc] init];
[v addSubView:v2];
[v2 release];
// Жив ли здесь v2 ?
Работа с памятью
Работа с памятью
Automatic Reference
     Counting
      (ARC)
Работа с памятью


           ARC
Automacic Reference
             Counting
 •   Позволяет избавиться от лишнего кода
 •   Меньше кода - больше разработки ;)
 •   Избавляет от головной боли
 •   Добавляет зубную боль ;)

http://longweekendmobile.com/2011/09/07/objc-
automatic-reference-counting-in-xcode-explained/
Хватит уже о
  памяти!
UIKit
framework
UIKit
Основная библиотека для
 работы с визуальными
     компонентами
UIKit
Громадина
  такая
UIKit

Каждый класс - своя
 отдельная история
UIView
• Все, что отображено на экране
наследуется от UIView
• Каждый view может быть контейнером
для других view
• addSubview:
• removeFromSuperview
UIView
UIViewController
  Основной кирпичик в
построении прикладного
  приложения под iOS
UIViewController
 Model-View-Controller
UIViewController

 А как он выглядит на
        экране?
UIViewController
UIViewController

Много UIView, и ни одного
   UIViewController'a
UIViewController
      Основные задачи
• Загрузка (и выгрузка) вьюх
• Связь вьюх и модели
• Управление UI приложения
• Реагирование на изменение
ориентации экрана
• Реагирование на memory warnings
UIViewController
UIViewController

  Жизненный цикл
UIViewController
          Создание
UIViewController
         Жизнь без
          UIView

           Lazy
          Loading
UIViewController
          dealloc :(

             Не
          интересно
UIViewController
         Жизнь без
          UIView

          (Еще раз)
UIViewController
          Создание
            view
         viewDidLoad
UIViewController
          Жизнь на
           экране
           viewWillAppear
           viewDidAppear
         viewWillDisappear
         viewDidDisappear
UIViewController
          Удаление
            view
         viewDidUnLoad

         Контроллер еще
               жив
UIViewController
         Жизнь без
          UIView

          (Еще раз)
UIViewController
          dealloc :(
UIViewController

        Жизненный цикл

http://habrahabr.ru/blogs/macosxdev/129557/
UIKit
•   UIViewController
•   UINavigationController
•   UITabBarController
•   UIScrollView
•   UITableView
•   UIButton
Где искать ответы?

developer.apple.com/iphone




   google.com                habrahabr.ru
Спасибо за внимание!

Тайкало Павел

email : ptaykalo@stanfy.com.ua
skype : tt.kilew
site : http://stanfy.com.ua

Contenu connexe

Tendances

Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorDevGAMM Conference
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseCocoaHeads
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Python Meetup
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORMMikhail Shamin
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf Conference
 
Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Roman Brovko
 
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsИнтуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsГлеб Тарасов
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
 
Web весна 2013 лекция 9
Web весна 2013 лекция 9Web весна 2013 лекция 9
Web весна 2013 лекция 9Technopark
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILRoman Brovko
 
Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Roman Brovko
 
Лекция 8. Итераторы, генераторы и модуль itertools.
 Лекция 8. Итераторы, генераторы и модуль itertools. Лекция 8. Итераторы, генераторы и модуль itertools.
Лекция 8. Итераторы, генераторы и модуль itertools.Roman Brovko
 
Лекция 10. Классы 2.
Лекция 10. Классы 2.Лекция 10. Классы 2.
Лекция 10. Классы 2.Roman Brovko
 
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, ЯндексYandex
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Roman Brovko
 
Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.Roman Brovko
 
Лекция 1. Начало.
Лекция 1. Начало.Лекция 1. Начало.
Лекция 1. Начало.Roman Brovko
 

Tendances (20)

Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at Vizor
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORM
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
 
Javascript
JavascriptJavascript
Javascript
 
Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.
 
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsИнтуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
 
Web весна 2013 лекция 9
Web весна 2013 лекция 9Web весна 2013 лекция 9
Web весна 2013 лекция 9
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GIL
 
Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.
 
Лекция 8. Итераторы, генераторы и модуль itertools.
 Лекция 8. Итераторы, генераторы и модуль itertools. Лекция 8. Итераторы, генераторы и модуль itertools.
Лекция 8. Итераторы, генераторы и модуль itertools.
 
Лекция 10. Классы 2.
Лекция 10. Классы 2.Лекция 10. Классы 2.
Лекция 10. Классы 2.
 
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.
 
Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.
 
Лекция 1. Начало.
Лекция 1. Начало.Лекция 1. Начало.
Лекция 1. Начало.
 

Similaire à Фундаментальные основы разработки под iOS. Павел Тайкало

Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьAndrey Bibichev
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS developmentIvan Trifonov
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПKirill Chebunin
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsИнтуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsГлеб Тарасов
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Minktyomo4ka
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...Mail.ru Group
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Систематизация экспрешнов в IE
Систематизация экспрешнов в IEСистематизация экспрешнов в IE
Систематизация экспрешнов в IERoman Komarov
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаprivate_face
 

Similaire à Фундаментальные основы разработки под iOS. Павел Тайкало (20)

Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS development
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
 
Интуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsИнтуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. Views
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
 
Bytecode
BytecodeBytecode
Bytecode
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Систематизация экспрешнов в IE
Систематизация экспрешнов в IEСистематизация экспрешнов в IE
Систематизация экспрешнов в IE
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кода
 

Plus de Stanfy

Case Study Food&Wine Mobile App
Case Study Food&Wine Mobile AppCase Study Food&Wine Mobile App
Case Study Food&Wine Mobile AppStanfy
 
Продвижение алкогольных брендов с помощью мобильных приложений
Продвижение алкогольных брендов с помощью мобильных приложенийПродвижение алкогольных брендов с помощью мобильных приложений
Продвижение алкогольных брендов с помощью мобильных приложенийStanfy
 
Stanfy. Портфолио
Stanfy. ПортфолиоStanfy. Портфолио
Stanfy. ПортфолиоStanfy
 
Украина и мобаил. Быть или не быть?
Украина и мобаил. Быть или не быть?Украина и мобаил. Быть или не быть?
Украина и мобаил. Быть или не быть?Stanfy
 
Предыстория, Тенденции, Платформа и Начало. Павел Башмаков
Предыстория, Тенденции, Платформа и Начало. Павел БашмаковПредыстория, Тенденции, Платформа и Начало. Павел Башмаков
Предыстория, Тенденции, Платформа и Начало. Павел БашмаковStanfy
 
Розробка під Android. Роман Мазур
Розробка під Android. Роман МазурРозробка під Android. Роман Мазур
Розробка під Android. Роман МазурStanfy
 
Основні поняття Android. Роман Мазур
Основні поняття Android. Роман МазурОсновні поняття Android. Роман Мазур
Основні поняття Android. Роман МазурStanfy
 
Один в поле не воин, и чего ищут пользователи. Андрей Гаркавый
Один в поле не воин, и чего ищут пользователи. Андрей ГаркавыйОдин в поле не воин, и чего ищут пользователи. Андрей Гаркавый
Один в поле не воин, и чего ищут пользователи. Андрей ГаркавыйStanfy
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
Prototype like God. Анна Мининкова
Prototype like God. Анна МининковаPrototype like God. Анна Мининкова
Prototype like God. Анна МининковаStanfy
 
Один в поле не воин, и чего ищут пользователи. Андрей Гаркавый
Один в поле не воин, и чего ищут пользователи. Андрей ГаркавыйОдин в поле не воин, и чего ищут пользователи. Андрей Гаркавый
Один в поле не воин, и чего ищут пользователи. Андрей ГаркавыйStanfy
 
Предыстория,тенденции, платформа и начало. Павел Башмаков
Предыстория,тенденции, платформа и начало. Павел БашмаковПредыстория,тенденции, платформа и начало. Павел Башмаков
Предыстория,тенденции, платформа и начало. Павел БашмаковStanfy
 
About Stanfy in Forbes Ukraine
About Stanfy in Forbes UkraineAbout Stanfy in Forbes Ukraine
About Stanfy in Forbes UkraineStanfy
 
Mobile News iPhone/iPad/Android - application development platform for web si...
Mobile News iPhone/iPad/Android - application development platform for web si...Mobile News iPhone/iPad/Android - application development platform for web si...
Mobile News iPhone/iPad/Android - application development platform for web si...Stanfy
 
Mobile News - Платформа для создания iPhone/iPad/Android приложений для онлай...
Mobile News - Платформа для создания iPhone/iPad/Android приложений для онлай...Mobile News - Платформа для создания iPhone/iPad/Android приложений для онлай...
Mobile News - Платформа для создания iPhone/iPad/Android приложений для онлай...Stanfy
 
Mobile Shopper Insights for 2011
Mobile Shopper Insights for 2011Mobile Shopper Insights for 2011
Mobile Shopper Insights for 2011Stanfy
 
Ukraine Business Insight
Ukraine Business InsightUkraine Business Insight
Ukraine Business InsightStanfy
 

Plus de Stanfy (17)

Case Study Food&Wine Mobile App
Case Study Food&Wine Mobile AppCase Study Food&Wine Mobile App
Case Study Food&Wine Mobile App
 
Продвижение алкогольных брендов с помощью мобильных приложений
Продвижение алкогольных брендов с помощью мобильных приложенийПродвижение алкогольных брендов с помощью мобильных приложений
Продвижение алкогольных брендов с помощью мобильных приложений
 
Stanfy. Портфолио
Stanfy. ПортфолиоStanfy. Портфолио
Stanfy. Портфолио
 
Украина и мобаил. Быть или не быть?
Украина и мобаил. Быть или не быть?Украина и мобаил. Быть или не быть?
Украина и мобаил. Быть или не быть?
 
Предыстория, Тенденции, Платформа и Начало. Павел Башмаков
Предыстория, Тенденции, Платформа и Начало. Павел БашмаковПредыстория, Тенденции, Платформа и Начало. Павел Башмаков
Предыстория, Тенденции, Платформа и Начало. Павел Башмаков
 
Розробка під Android. Роман Мазур
Розробка під Android. Роман МазурРозробка під Android. Роман Мазур
Розробка під Android. Роман Мазур
 
Основні поняття Android. Роман Мазур
Основні поняття Android. Роман МазурОсновні поняття Android. Роман Мазур
Основні поняття Android. Роман Мазур
 
Один в поле не воин, и чего ищут пользователи. Андрей Гаркавый
Один в поле не воин, и чего ищут пользователи. Андрей ГаркавыйОдин в поле не воин, и чего ищут пользователи. Андрей Гаркавый
Один в поле не воин, и чего ищут пользователи. Андрей Гаркавый
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
Prototype like God. Анна Мининкова
Prototype like God. Анна МининковаPrototype like God. Анна Мининкова
Prototype like God. Анна Мининкова
 
Один в поле не воин, и чего ищут пользователи. Андрей Гаркавый
Один в поле не воин, и чего ищут пользователи. Андрей ГаркавыйОдин в поле не воин, и чего ищут пользователи. Андрей Гаркавый
Один в поле не воин, и чего ищут пользователи. Андрей Гаркавый
 
Предыстория,тенденции, платформа и начало. Павел Башмаков
Предыстория,тенденции, платформа и начало. Павел БашмаковПредыстория,тенденции, платформа и начало. Павел Башмаков
Предыстория,тенденции, платформа и начало. Павел Башмаков
 
About Stanfy in Forbes Ukraine
About Stanfy in Forbes UkraineAbout Stanfy in Forbes Ukraine
About Stanfy in Forbes Ukraine
 
Mobile News iPhone/iPad/Android - application development platform for web si...
Mobile News iPhone/iPad/Android - application development platform for web si...Mobile News iPhone/iPad/Android - application development platform for web si...
Mobile News iPhone/iPad/Android - application development platform for web si...
 
Mobile News - Платформа для создания iPhone/iPad/Android приложений для онлай...
Mobile News - Платформа для создания iPhone/iPad/Android приложений для онлай...Mobile News - Платформа для создания iPhone/iPad/Android приложений для онлай...
Mobile News - Платформа для создания iPhone/iPad/Android приложений для онлай...
 
Mobile Shopper Insights for 2011
Mobile Shopper Insights for 2011Mobile Shopper Insights for 2011
Mobile Shopper Insights for 2011
 
Ukraine Business Insight
Ukraine Business InsightUkraine Business Insight
Ukraine Business Insight
 

Фундаментальные основы разработки под iOS. Павел Тайкало

  • 2. Разработка под iOS Национальная забава – бег по полю с граблями
  • 3. Разработка под iOS • Инструменты • Основные типы данных • Управление памятью • UIKit (UIView + UIViewController + UI..) ∞ • Жизненный цикл приложения • Фундаментальные шаблоны в iOS
  • 4. Инструменты Xcode Interface Builder iOS Simulator Instruments
  • 6. Xcode • Основная среда разработки • Обновляется не особо часто • Желателен большой экран • Последняя версия Xcode 4.2.1 (4.3b) • Развивается в странную сторону ;) • Есть альтернативы, но они не могут полностью заменить Xcode
  • 8. Interface Builder • WYSIWYG редактор в Xcode • Позволяет делать быстрое прототипирование • Встроен в Xcode • Позволяет отвязать представление от кода • Желателен большой экран • В паре с Xcode использует много памяти
  • 10. iOS Simulator • Незаменим для разработки • Использует ресурсы компьютера • Позволяет эмулировать различные внешние воздействия • И все же, не физическое устройство
  • 12. Instruments • Показывют события приложения • Загрузка CPU, Объем памяти, Сетевая Активность, Утечки памяти, Расход батареи, UI Automation • И многое многое другое • Помогает там, где другие инструменты бессильны
  • 14. Типы данных • Ну ооочень много • Типы данных из C никуда не делись • Есть и Objective-C (просто typedef) int NSInteger float NSUInteger bool CGFloat double ... char ...
  • 15. Структуры Только базовые, которые понадобятся при разработке CGPoint // x,y CGSize // width, height CGRect // origin(CGPoint) // size(CGSize) UIEdgeInsets // top, left, bottom, right
  • 16. Структуры Для структур - чаще всего есть целая туча C-функций CGPointMake(CGFloat x, CGFloat y) CGSizeMake(CGFloat width, CGFloat height) CGRectMake( ... ) CGRectContainsPoint( ... ) CGRectIntersection( ... ) CGRectInset( ... )
  • 17. Класс Интерфейс @interface SHAppDelegate : UIResponder { Facebook *_facebook; } @property (strong) UIWindow *window; @property (strong) Facebook *facebook; + (void)classCoolMethod:(id)params; - (void)myCoolMethod:(id)params; @end
  • 18. Класс Имя @interface SHAppDelegate : UIResponder { Facebook *_facebook; } @property (strong) UIWindow *window; @property (strong) Facebook *facebook; + (void)classCoolMethod:(id)params; - (void)myCoolMethod:(id)params; @end
  • 19. Класс Родитель @interface SHAppDelegate : UIResponder { Facebook *_facebook; } @property (strong) UIWindow *window; @property (strong) Facebook *facebook; + (void)classCoolMethod:(id)params; - (void)myCoolMethod:(id)params; @end
  • 20. Класс Внутренние переменные @interface SHAppDelegate : UIResponder { Facebook *_facebook; } @property (strong) UIWindow *window; @property (strong) Facebook *facebook; + (void)classCoolMethod:(id)params; - (void)myCoolMethod:(id)params; @end
  • 21. Класс Свойства @interface SHAppDelegate : UIResponder { Facebook *_facebook; } @property (strong) UIWindow *window; @property (strong) Facebook *facebook; + (void)classCoolMethod:(id)params; - (void)myCoolMethod:(id)params; @end
  • 22. Класс Методы @interface SHAppDelegate : UIResponder { Facebook *_facebook; } @property (strong) UIWindow *window; @property (strong) Facebook *facebook; + (void)classCoolMethod:(id)params; - (void)myCoolMethod:(id)params; @end
  • 23. Класс Имплементация (Реализация) @implementation SHAppDelegate @synthesize window = _window; @synthesize facebook = _facebook; - (void)myCoolMethod:(id)params { NSLog(@"Hell'O World"); } @end
  • 24. Класс Генерация свойств @implementation SHAppDelegate @synthesize window = _window; @synthesize facebook = _facebook; - (void)myCoolMethod:(id)params { NSLog(@"Hell'O World"); } @end
  • 25. Класс Реализация методов @implementation SHAppDelegate @synthesize window = _window; @synthesize facebook = _facebook; - (void)myCoolMethod:(id)params { NSLog(@"Hell'O World"); } @end
  • 26. Протоколы @protocol MyFriend - (void)beHonest; - (void)listenToMe; @optional - (void)haveMoney; @end
  • 27. Протоколы Обязательные методы @protocol MyFriend - (void)beHonest; - (void)listenToMe; @optional - (void)haveMoney; @end
  • 28. Протоколы Опциональные методы @protocol MyFriend - (void)beHonest; - (void)listenToMe; @optional - (void)haveMoney; @end
  • 29. Категории @interface NSString (MD5) - (NSString*)md5Hash; @end @implementation NSString (MD5) - (NSString*)md5Hash { return @"Not implemented yet"; } @end
  • 31. Отсылка сообщения c параметрами User * someUser = [User createUser]; [helper helpUser:someUser]; [helper helpUser:someUser withLab:@"23"];
  • 32. Вложенные вызовы NSArray * arr = [NSArray arrayWithObject: [NSArray arrayWithObject: [User createUser] ] ]; [[[NSArray alloc] init] autorelease]
  • 34. Методы или селекторы? SEL sel = @selector(addObject:); NSMutableArray * arr = [NSMutable array]; [arr performSelector:sel withObject:@"Cool"]; [arr addObject:@"Cool"];
  • 35. Методы или селекторы? Селектор - это просто имя SEL sel = @selector(addObject:); Его можно создать на этапе выполнения SEL sel = NSSelectorFromString(@"addObject:");
  • 36. Методы или селекторы? Метод - это скомпилированный код - (void)myCoolMethod:(id)params { NSLog(@"Hell'O World"); } Чаще всего название метода и селектор, при помощи которого он вызывается, совпадают
  • 37. Методы или селекторы? Метод всегда знает про селектор, при помощи которого он был вызван - (void)myCoolMethod:(id)params { // Почти всегда // Здесь будет выведено // myCoolMethod: NSLog(NSStringFromSelector(_cmd)); }
  • 38. Методы или селекторы? Если нету никакого контекста, то можно для простоты считать, что Метод == Селектор
  • 40. Properties @interface MyObj : UIResponder { Facebook *_facebook; } @property (retain) UIWindow *window; @property (copy) Facebook *facebook; + (void)classCoolMethod:(id)params; - (void)myCoolMethod:(id)params; @end
  • 41. Properties @implementation MyObj @synthesize window = _window; @synthesize facebook = _facebook; @end
  • 42. Properties Getters @synthesize window = _window; @synthesize facebook = _facebook; MyObj * obj = [[MyObj alloc] init]; UIWindow * wnd; wnd = obj.window; wnd = [obj window];
  • 43. Properties Setters @synthesize window = _window; @synthesize facebook = _facebook; MyObj * obj = [[MyObj alloc] init]; UIWindow * wnd = nil; obj.window = wnd; [obj setWindow:wnd];
  • 44. Properties Direct Access @synthesize window = _window; @synthesize facebook = _facebook; MyObj * obj = [[MyObj alloc] init]; UIWindow * wnd = nil; wnd = obj->window; obj->window = wnd; Зачем на свойства ?
  • 45. Properties Overriden Getter @synthesize window = _window; @synthesize facebook = _facebook; - (UIWindow * )window { NSLog(@"Кто-то вызвал getter"); return _window; }
  • 46. Properties Overriden Setter @synthesize window = _window; @synthesize facebook = _facebook; - (void)setWindow:(UIWindow*)w { if (w != nil) { _window = w; } else { NSLog(@"Не-не-не, Д.Б.!"); } }
  • 47. Properties Overriden Setter @synthesize window = _window; @synthesize facebook = _facebook; - (void)setWindow:(UIWindow*)w { if (w != nil) { Только с _window = w; } else { ARC NSLog(@"Не-не-не, Д.Б.!"); } }
  • 49. Работа с памятью Memory management
  • 50. Работа с памятью Это просто! releas autoreleas retain e e alloc copy new deallo c
  • 51. Работа с памятью • Объект живет, если на него есть хоть одна ссылка • На каждый объект может быть несколько ссылок • Как только количество ссылок на объект равно нулю, он удаляется из памяти
  • 52. Работа с памятью Жизнь замечательных объектов alloc Создание в ручном режиме new
  • 53. Работа с памятью Жизнь замечательных объектов alloc release Жизнь autorele retain ase new copy
  • 54. Работа с памятью Жизнь замечательных объектов alloc release dealloc autorele retain ase new Уничтожение copy "автоматически"
  • 55. Работа с памятью Жизнь замечательных объектов Вызывать метод dealloc в ручную, нельзя! Если вы, все же, это сделали, то перечитайте еще раз Memory Management.
  • 56. Работа с памятью Жизнь замечательных объектов Метод Изменение Количество alloc +1 1 new +1 1 copy +1* ∞ retain +1 ∞ release -1 ∞ autorelease -1* ∞ dealloc 0 1
  • 57. Работа с памятью Создание Метод Изменение Количество alloc +1 1 new +1 1 copy +1* ∞ retain +1 ∞ release -1 ∞ autorelease -1* ∞ dealloc 0 1
  • 58. Работа с памятью Жизнь Метод Изменение Количество alloc +1 1 new +1 1 copy +1* ∞ retain +1 ∞ release -1 ∞ autorelease -1* ∞ dealloc 0 1
  • 59. Работа с памятью Жизнь замечательных объектов Метод Изменение Количество alloc +1 1 new +1 1 copy +1* ∞ retain +1 ∞ release -1 ∞ autorelease -1* ∞ dealloc 0 1
  • 60. Работа с памятью Жизнь замечательных объектов Балансируем вызовы методов, которые увеличивают количество ссылок, и уменьшают их. +1+1+1-1-1+1-1-1+1-1 = 0
  • 61. Работа с памятью Жизнь замечательных объектов Делаем это только в СВОЕМ КОДЕ
  • 62. Работа с памятью Жизнь замечательных объектов Если все делаем правильно, то у нас всегда будет хватать памяти
  • 63. Работа с памятью Жизнь замечательных объектов Не вызывать методов - тоже баланс :) - (void)setWindow:(UIWindow*)w { if (w != nil) { _window = w; } else { NSLog(@"Не-не-не, Д.Б.!"); } }
  • 64. Работа с памятью Жизнь замечательных объектов А теперь по честному - (void)setWindow:(UIWindow*)w { [_window autorelease]; _window = [w retain]; }
  • 65. Работа с памятью Жизнь замечательных объектов А теперь по честному - (void)setWindow:(UIWindow*)w { [_window autorelease]; _window = [w retain]; } - (void)dealloc { [_window release]; [super dealloc]; }
  • 66. Работа с памятью Жизнь замечательных объектов И еще один пример UIView * v = [[[UIView alloc] init] autorelease]; UIView * v2 = [[UIView alloc] init]; [v addSubView:v2]; [v2 release];
  • 67. Работа с памятью Жизнь замечательных объектов И еще один пример UIView * v = [[[UIView alloc] init] autorelease]; UIView * v2 = [[UIView alloc] init]; [v addSubView:v2]; [v2 release]; // Жив ли здесь v2 ?
  • 69. Работа с памятью Automatic Reference Counting (ARC)
  • 71. Automacic Reference Counting • Позволяет избавиться от лишнего кода • Меньше кода - больше разработки ;) • Избавляет от головной боли • Добавляет зубную боль ;) http://longweekendmobile.com/2011/09/07/objc- automatic-reference-counting-in-xcode-explained/
  • 72. Хватит уже о памяти!
  • 74. UIKit Основная библиотека для работы с визуальными компонентами
  • 76. UIKit Каждый класс - своя отдельная история
  • 77. UIView • Все, что отображено на экране наследуется от UIView • Каждый view может быть контейнером для других view • addSubview: • removeFromSuperview
  • 79. UIViewController Основной кирпичик в построении прикладного приложения под iOS
  • 81. UIViewController А как он выглядит на экране?
  • 83. UIViewController Много UIView, и ни одного UIViewController'a
  • 84. UIViewController Основные задачи • Загрузка (и выгрузка) вьюх • Связь вьюх и модели • Управление UI приложения • Реагирование на изменение ориентации экрана • Реагирование на memory warnings
  • 87. UIViewController Создание
  • 88. UIViewController Жизнь без UIView Lazy Loading
  • 89. UIViewController dealloc :( Не интересно
  • 90. UIViewController Жизнь без UIView (Еще раз)
  • 91. UIViewController Создание view viewDidLoad
  • 92. UIViewController Жизнь на экране viewWillAppear viewDidAppear viewWillDisappear viewDidDisappear
  • 93. UIViewController Удаление view viewDidUnLoad Контроллер еще жив
  • 94. UIViewController Жизнь без UIView (Еще раз)
  • 95. UIViewController dealloc :(
  • 96. UIViewController Жизненный цикл http://habrahabr.ru/blogs/macosxdev/129557/
  • 97. UIKit • UIViewController • UINavigationController • UITabBarController • UIScrollView • UITableView • UIButton
  • 99. Спасибо за внимание! Тайкало Павел email : ptaykalo@stanfy.com.ua skype : tt.kilew site : http://stanfy.com.ua