SlideShare a Scribd company logo
Разработка приложений для iOS




             Лекция 2


MVC,View, Controllers


                               Глеб Тарасов
Приватные свойства или поля?
http://stackoverflow.com/questions/411048/differences-between-
private-fields-and-private-properties
Вспомним прошлое
     занятие
Какой метод управления памятью
    используется в языке Си?
Какой метод управления памятью
    используется в языке Си?

 Ручное выделение памяти, удаление
Какой метод управления памятью
    используется в языке Си?

 Ручное выделение памяти, удаление

        А в Objective-C?
Какой метод управления памятью
    используется в языке Си?

 Ручное выделение памяти, удаление

        А в Objective-C?

          Подсчет ссылок
Чем отличаются строки
 "string1" и @"string2"
Чем отличаются строки
 "string1" и @"string2"


Char*      NSString*
Как сохранить число 5 в массив?
Как сохранить число 5 в массив?



        NSNumber
Что такое «strong» и «weak»?

   Чем они отличаются?
Что такое «strong» и «weak»?

   Чем они отличаются?

       модификаторы у свойств,
  strong увеличивает счетчик ссылок,
               weak нет
Что значит минус
перед определением
   - (void)deleteProfile;
Что значит минус
перед определением
   - (void)deleteProfile;



Экземплярный метод
Из чего состоит
    свойство?
@property(nonatomic) NSInteger age;
Из чего состоит
      свойство?
  @property(nonatomic) NSInteger age;




getter, setter, внутренняя
        переменная
Как создать объект?
    User *user = ...
Как создать объект?
          User *user = ...




User *user = [[User alloc] init];
Какой базовый класс
для всех объектов в
    Objective-C?
Какой базовый класс
для всех объектов в
    Objective-C?

     NSObject
Как вызвать метод у
          объекта user с
       параметрами «topic»,
             «text»
- (void)postCommentWithTopic:(NSString *)topic andText:
(NSString *)text;
Как вызвать метод у
          объекта user с
       параметрами «topic»,
             «text»
- (void)postCommentWithTopic:(NSString *)topic andText:
(NSString *)text;




[user postCommentWithTopic:@"topic"
andText:@"text"];
MVC
       Controller




View                Model
View
UIView
@property(nonatomic) CGRect frame;
@property(nonatomic) CGRect bounds;
@property(nonatomic) CGPoint center;

@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;

-   (void)removeFromSuperview;
-   (void)addSubview:(UIView *)view;
-   (void)bringSubviewToFront:(UIView *)view;
-   (void)sendSubviewToBack:(UIView *)view;

@property(nonatomic,copy) UIColor *backgroundColor;
@property(nonatomic) CGFloat alpha;
@property(nonatomic,getter=isHidden) BOOL hidden;
Иерархия UIView
Стандартные
 контролы
Controller
UIViewController
// The getter first invokes [self loadView] if the view hasn't been set yet.
// Subclasses must call super if they override the setter or getter.
@property(nonatomic,retain) UIView *view;

// This is where subclasses should create their custom view hierarchy
// if they aren't using a nib.
// Should never be called directly.
- (void)loadView;


- (void)viewWillUnload __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
// Called after the view has been loaded. For view controllers created in
code,
// this is after -loadView. For view controllers unarchived from a nib,
// this is after the view is set.
- (void)viewDidLoad;

// Called after the view controller's view is released and set to nil.
// For example, a memory warning which causes the view to be purged.
// Not invoked as a result of -dealloc.
- (void)viewDidUnload __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);

- (BOOL)isViewLoaded __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
@interface ViewController : UIViewController

@end


@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    CGRect rect = CGRectMake(20, 20, 100, 100);
    UILabel *l = [[UILabel alloc] initWithFrame:rect];
    l.text = @"text";
    [self.view addSubview:l];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSLog(@"появился");
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    NSLog(@"пропал");
}

@end
Наполнение View


     В коде                                  Interface Builder

- (void)viewDidLoad
{
    [super viewDidLoad];
    CGRect rect = CGRectMake(20, 20, 100, 100);
    UILabel *l = [[UILabel alloc] initWithFrame:rect];
    l.text = @"text";
    [self.view addSubview:l];
}
Interface Builder
  (демонстрация)
События
target, action

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.button addTarget:self
                    action:@selector(buttonClicked)
          forControlEvents:UIControlEventTouchUpInside];
}

- (void)buttonClicked
{
    NSLog(@"buttonClicked");
}
delegate
@interface ViewController : UIViewController<UITableViewDelegate>



- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView.delegate = self;
}

- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"select row");
}
Отрывок
        UIScrollViewDelegate
@protocol UIScrollViewDelegate<NSObject>

@optional

// any offset changes
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;

// any zoom scale changes
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_2);

// called on start of dragging
// (may require some time and or distance to move)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

...
notifications
Событие случилось:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center postNotificationName:@"UserChanged" object:nil];


Ловим событие:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self
           selector:@selector(userChanged)
               name:@"UserChanged"
             object:nil];

- (void)userChanged
{
    NSLog(@"Событие произошло");
}
MVC
       Controller




View                Model
MVC
       Controller



        outlets


View                Model
MVC
       Controller



        outlets


View                Model
MVC
              Controller
  delegates

               outlets


View                       Model
MVC
                  Controller
      delegates
target,action
                   outlets


  View                         Model
MVC
                  Controller
      delegates
target,action
                   outlets


  View                         Model
MVC
                  Controller
      delegates
target,action                  notifications
                   outlets


  View                            Model
Демонстрация
Что мы сегодня узнали?
Какой класс базовый
      для всех
   интерфейсных
    элементов?
Какой класс базовый
      для всех
   интерфейсных
    элементов?

      UIView
Какой класс базовый
      для всех
   контроллеров?
Какой класс базовый
      для всех
   контроллеров?
  UIViewController
Как контроллер получает
ссылку на view в Interface
        Builder?
Как контроллер получает
ссылку на view в Interface
        Builder?



     через IBOutlet
Как контроллер узнает
   об изменениях в
       модели?
Как контроллер узнает
   об изменениях в
       модели?


  через notification-ы
Как view сообщает
  контроллеру о
    действиях
  пользователя?
Как view сообщает
      контроллеру о
        действиях
      пользователя?

через target/action и delegate
Темы для подготовки
       Написать
     приложение-
    демонстрацию

  UIWebView
 (например, простой
       браузер:
   адресная строка,
кнопки назад/вперед)
Темы для подготовки
Написать приложение-демонстрацию

        UIScrollView
    (например,
     прокрутка
    нескольких
     картинок
  с пагинацией и
        без)
Темы для подготовки
      Написать
    приложение-
   демонстрацию

MKMapView
  (например, карта с
указанием на ваш дом)
Темы для подготовки
    Написать
  приложение-
 демонстрацию
UITableView
 (например, вывести
   список строк из
  файла в таблицу)
Спасибо

     Глеб Тарасов
     gleb34@gmail.com
     twitter.com/pilot34

More Related Content

PDF
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
PPTX
Антон Валюх - Использование паттерна Mvvm в android
PPT
Moxy – реализация MVP под Android. С щепоткой магии
PPT
Moxy. Из чего состоит и как этим пользоваться
PPTX
MVP, Moxy. Как правильно пользоваться
PDF
#MBLTdev: Опыт использования MVVM в реальных проектах
PPTX
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
PDF
«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Антон Валюх - Использование паттерна Mvvm в android
Moxy – реализация MVP под Android. С щепоткой магии
Moxy. Из чего состоит и как этим пользоваться
MVP, Moxy. Как правильно пользоваться
#MBLTdev: Опыт использования MVVM в реальных проектах
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY

What's hot (20)

PDF
Лучший frontend-фреймворк, и почему вы его не хотите
PDF
Aspect Oriented Approach
PDF
RequireJS і Magento 2
PPTX
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
PDF
CodeFest dirty facts about AngularJS
PPT
Средства разработки web приложений (Web frameworks)
PDF
Rambler.iOS #3: Dependency Injection в iOS
PPTX
Особенности разработки API / Всеволод Шмыров (Яндекс)
PPTX
сервисы в Angular js
PDF
Тестируй это / Виктор Русакович (GP Solutions)
PDF
[C++ CoreHard Autumn 2018] Actors vs CSP vs Task...
PDF
Angular 2: Всех переиграл
PPTX
AngularJS. Введение и простые примеры для понимания
KEY
занятие 2
PDF
Рендеринг может больше: vue.js vs React, Андрей Солодовников
PDF
C# Web. Занятие 11.
PPTX
Angular 2 vs Angular 1
PPTX
создание живых сайтов
PDF
Автоматизация UI тестирования под Windows и Windows Phone
PPTX
Самодельная параметризация и параллелизация тестов на Webdriver (JS)
Лучший frontend-фреймворк, и почему вы его не хотите
Aspect Oriented Approach
RequireJS і Magento 2
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
CodeFest dirty facts about AngularJS
Средства разработки web приложений (Web frameworks)
Rambler.iOS #3: Dependency Injection в iOS
Особенности разработки API / Всеволод Шмыров (Яндекс)
сервисы в Angular js
Тестируй это / Виктор Русакович (GP Solutions)
[C++ CoreHard Autumn 2018] Actors vs CSP vs Task...
Angular 2: Всех переиграл
AngularJS. Введение и простые примеры для понимания
занятие 2
Рендеринг может больше: vue.js vs React, Андрей Солодовников
C# Web. Занятие 11.
Angular 2 vs Angular 1
создание живых сайтов
Автоматизация UI тестирования под Windows и Windows Phone
Самодельная параметризация и параллелизация тестов на Webdriver (JS)
Ad

Similar to Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers (20)

PDF
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
PPTX
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...
PDF
Интуит. Разработка приложений для iOS. Лекция 3. Views
PDF
iOS-05_2-UIKit
PPT
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
PDF
Yet another architectur. Как устроены приложения SuperJob изнутри
PDF
Mobile automation uamobile
PPTX
iOS and Android Mobile Test Automation
PDF
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
PDF
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
PDF
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
PDF
AndroidMVPHelper
PDF
Избавляемся от старья и переходим на SwiftUI / Руслан Кавецкий (Agora)
PDF
Fun with core graphics
PPTX
Референсная архитектура приложения на ASP.NET MVC
PDF
Паттерны проектирования
PPTX
Что нового в Visual Studio 2010 и .Net 4.0
PDF
Mvc, mvp and mvvm: A comparison of architectural patterns
PPTX
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
PDF
MVVM в WinForms – DevExpress Way (теория и практика)
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...
Интуит. Разработка приложений для iOS. Лекция 3. Views
iOS-05_2-UIKit
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
Yet another architectur. Как устроены приложения SuperJob изнутри
Mobile automation uamobile
iOS and Android Mobile Test Automation
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
AndroidMVPHelper
Избавляемся от старья и переходим на SwiftUI / Руслан Кавецкий (Agora)
Fun with core graphics
Референсная архитектура приложения на ASP.NET MVC
Паттерны проектирования
Что нового в Visual Studio 2010 и .Net 4.0
Mvc, mvp and mvvm: A comparison of architectural patterns
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
MVVM в WinForms – DevExpress Way (теория и практика)
Ad

More from Глеб Тарасов (20)

PDF
Gleb Tarasov. Portfolio
PDF
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
PDF
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
PDF
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
PDF
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
PDF
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
PDF
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
PDF
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
PDF
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
PDF
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
PPT
Презентация проекта Ulect
PDF
Презентация для Foundation Institute
PDF
Делаем жизнь лучше с CocoaPods
PDF
msumobi2. Лекция 2
PDF
msumobi2. Лекция 1
PDF
Школа-студия разработки для iOS. Лекция 4. Работа с данными
PDF
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
PDF
ShareKit. Evernote Dev Meetup
PDF
Глеб Тарасов. Портфолио
PDF
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты
Gleb Tarasov. Portfolio
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Презентация проекта Ulect
Презентация для Foundation Institute
Делаем жизнь лучше с CocoaPods
msumobi2. Лекция 2
msumobi2. Лекция 1
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
ShareKit. Evernote Dev Meetup
Глеб Тарасов. Портфолио
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты

Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers