Школа-студия разработки приложений для ios. 2 лекция. mvc,...
DESCRIPTION
TRANSCRIPT
![Page 1: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/1.jpg)
MVC, View, Controllers
Разработка приложений для iOS
Лекция 2
Глеб Тарасов
![Page 2: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/2.jpg)
Приватные свойства или поля?
http://stackoverflow.com/questions/411048/differences-between-private-fields-and-private-properties
![Page 3: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/3.jpg)
Вспомним прошлое занятие
![Page 4: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/4.jpg)
Какой метод управления памятью используется в языке Си?
![Page 5: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/5.jpg)
Какой метод управления памятью используется в языке Си?
Ручное выделение памяти, удаление
![Page 6: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/6.jpg)
Какой метод управления памятью используется в языке Си?
А в Objective-C?
Ручное выделение памяти, удаление
![Page 7: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/7.jpg)
Какой метод управления памятью используется в языке Си?
А в Objective-C?
Ручное выделение памяти, удаление
Подсчет ссылок
![Page 8: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/8.jpg)
Чем отличаются строки "string1" и @"string2"
![Page 9: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/9.jpg)
Чем отличаются строки "string1" и @"string2"
Char* NSString*
![Page 10: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/10.jpg)
Как сохранить число 5 в массив?
![Page 11: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/11.jpg)
Как сохранить число 5 в массив?
NSNumber
![Page 12: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/12.jpg)
Что такое «strong» и «weak»?
Чем они отличаются?
![Page 13: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/13.jpg)
Что такое «strong» и «weak»?
Чем они отличаются?
модификаторы у свойств,strong увеличивает счетчик ссылок,
weak нет
![Page 14: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/14.jpg)
Что значит минус перед определением
- (void)deleteProfile;
![Page 15: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/15.jpg)
Что значит минус перед определением
Экземплярный метод
- (void)deleteProfile;
![Page 16: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/16.jpg)
Из чего состоит свойство?
@property(nonatomic) NSInteger age;
![Page 17: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/17.jpg)
Из чего состоит свойство?
getter, setter, внутренняя переменная
@property(nonatomic) NSInteger age;
![Page 18: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/18.jpg)
Как создать объект?
User *user = ...
![Page 19: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/19.jpg)
Как создать объект?
User *user = [[User alloc] init];
User *user = ...
![Page 20: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/20.jpg)
Какой базовый класс для всех объектов в
Objective-C?
![Page 21: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/21.jpg)
Какой базовый класс для всех объектов в
Objective-C?
NSObject
![Page 22: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/22.jpg)
Как вызвать метод у объекта user с
параметрами «topic», «text»
- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;
![Page 23: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/23.jpg)
Как вызвать метод у объекта user с
параметрами «topic», «text»
[user postCommentWithTopic:@"topic" andText:@"text"];
- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;
![Page 24: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/24.jpg)
MVC
Controller
ModelView
![Page 25: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/25.jpg)
View
![Page 26: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/26.jpg)
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;
![Page 27: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/27.jpg)
Иерархия UIView
![Page 28: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/28.jpg)
Стандартные контролы
![Page 29: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/29.jpg)
Controller
![Page 30: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/30.jpg)
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);
![Page 31: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/31.jpg)
@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
@interface ViewController : UIViewController
@end
![Page 32: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/32.jpg)
Наполнение 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];}
![Page 33: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/33.jpg)
Interface Builder(демонстрация)
![Page 34: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/34.jpg)
События
![Page 35: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/35.jpg)
target, action
- (void)viewDidLoad{ [super viewDidLoad];
[self.button addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside];}
- (void)buttonClicked{ NSLog(@"buttonClicked");}
![Page 36: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/36.jpg)
delegate
- (void)viewDidLoad{ [super viewDidLoad]; self.tableView.delegate = self;}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"select row");}
@interface ViewController : UIViewController<UITableViewDelegate>
![Page 37: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/37.jpg)
Отрывок 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;
...
![Page 38: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/38.jpg)
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(@"Событие произошло");}
Событие случилось:
Ловим событие:
![Page 39: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/39.jpg)
MVC
Controller
ModelView
![Page 40: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/40.jpg)
MVC
Controller
ModelView
outlets
![Page 41: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/41.jpg)
MVC
Controller
ModelView
outlets
![Page 42: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/42.jpg)
MVC
Controller
ModelView
delegates
outlets
![Page 43: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/43.jpg)
MVC
Controller
ModelView
delegates
outletstarget,action
![Page 44: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/44.jpg)
MVC
Controller
ModelView
delegates
outletstarget,action
![Page 45: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/45.jpg)
MVC
Controller
ModelView
delegates
outlets
notificationstarget,action
![Page 46: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/46.jpg)
Демонстрация
![Page 47: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/47.jpg)
Что мы сегодня узнали?
![Page 48: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/48.jpg)
Какой класс базовый для всех
интерфейсных элементов?
![Page 49: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/49.jpg)
Какой класс базовый для всех
интерфейсных элементов?
UIView
![Page 50: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/50.jpg)
Какой класс базовый для всех
контроллеров?
![Page 51: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/51.jpg)
Какой класс базовый для всех
контроллеров?
UIViewController
![Page 52: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/52.jpg)
Как контроллер получает ссылку на view в Interface
Builder?
![Page 53: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/53.jpg)
Как контроллер получает ссылку на view в Interface
Builder?
через IBOutlet
![Page 54: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/54.jpg)
Как контроллер узнает об изменениях в модели?
![Page 55: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/55.jpg)
Как контроллер узнает об изменениях в модели?
через notification-ы
![Page 56: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/56.jpg)
Как view сообщает контроллеру о действиях пользователя?
![Page 57: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/57.jpg)
Как view сообщает контроллеру о действиях пользователя?
через target/action и delegate
![Page 58: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/58.jpg)
Темы для подготовкиНаписать приложение-демонстрацию
UIWebView(например, простой
браузер: адресная строка,
кнопки назад/вперед)
![Page 59: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/59.jpg)
Темы для подготовкиНаписать приложение-демонстрацию
UIScrollView(например, прокрутка нескольких картинок
с пагинацией и без)
![Page 60: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/60.jpg)
Темы для подготовкиНаписать приложение-демонстрацию
MKMapView
(например, карта с указанием на ваш дом)
![Page 61: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers](https://reader036.vdocuments.mx/reader036/viewer/2022081721/548051aeb379594e2b8b5aba/html5/thumbnails/61.jpg)
Темы для подготовкиНаписать приложение-демонстрацию
UITableView(например, вывести список строк из файла в таблицу)