76
Знакомство, Введение в Objective-C Разработка приложений для iOS Лекция 1 Глеб Тарасов #msumobi2

msumobi2. Лекция 1

  • Upload
    -

  • View
    855

  • Download
    1

Embed Size (px)

DESCRIPTION

Разработка мобильных приложений для iOS

Citation preview

Page 1: msumobi2. Лекция 1

Знакомство,Введение в Objective-C

Разработка приложений для iOS

Лекция 1

Глеб Тарасов#msumobi2

Page 2: msumobi2. Лекция 1

Связь

http://vk.com/msumobi2

#msumobi2

Page 3: msumobi2. Лекция 1

ЦелиiPhone

Page 4: msumobi2. Лекция 1

ЦелиiPad

Page 5: msumobi2. Лекция 1

ЦелиИгры

Page 6: msumobi2. Лекция 1
Page 7: msumobi2. Лекция 1

Вступительное задание — 10 человек

Домашние задания — 5 человек

Page 8: msumobi2. Лекция 1

Кто это?

Page 9: msumobi2. Лекция 1

Ерундопель, Ударник, Орфограф, Сколькометр

Игры в слова для iPhone/iPad

-1 место среди платных игр в российском AppStore

-3 место в российском AppStore среди всех платных приложений

-13 место в российском AppStore среди бесплатных приложений

Page 10: msumobi2. Лекция 1

iPhone

Page 11: msumobi2. Лекция 1
Page 12: msumobi2. Лекция 1

iPad

Page 13: msumobi2. Лекция 1
Page 14: msumobi2. Лекция 1
Page 15: msumobi2. Лекция 1

iGuides

Приложение под iPhone/iPad для чтения новостей с сайта http://iguides.ru

1 место в российском AppStore в категории Top

25 News Free

Page 16: msumobi2. Лекция 1

iPhone

Page 17: msumobi2. Лекция 1

iPad

Page 18: msumobi2. Лекция 1

ИНТУИТ

Мобильное приложение для Национального Открытого Университета http://intuit.ru. Чтение лекций, просмотр видео, прохождение тестов и сдача экзаменов

2 место в российском AppStore в категории Top 25 Education Free

Page 19: msumobi2. Лекция 1

iPhone

Page 20: msumobi2. Лекция 1
Page 21: msumobi2. Лекция 1

iPad

Page 22: msumobi2. Лекция 1
Page 23: msumobi2. Лекция 1

AldoCoppola

Приложение электронной записи клиентов для сети салонов красоты «AldoCoppola».

Page 24: msumobi2. Лекция 1
Page 25: msumobi2. Лекция 1
Page 26: msumobi2. Лекция 1
Page 27: msumobi2. Лекция 1

http://www.slideshare.net/gtarasov/ss-12299478

Остальное тут:

Page 28: msumobi2. Лекция 1

Мобильная разработка, что изменилось?

Page 29: msumobi2. Лекция 1
Page 30: msumobi2. Лекция 1
Page 31: msumobi2. Лекция 1
Page 32: msumobi2. Лекция 1
Page 33: msumobi2. Лекция 1

Особенности

• Высокие ожидания пользователей• Другие паттерны использования

• Маленький экран• Слабый процессор, мало памяти• Медленный интернет• Управление жестами

Page 34: msumobi2. Лекция 1

Почему iOS?

Page 35: msumobi2. Лекция 1
Page 36: msumobi2. Лекция 1

Зачем вам это?

Page 37: msumobi2. Лекция 1

Разработка под iOS

Page 38: msumobi2. Лекция 1

XCode

Page 39: msumobi2. Лекция 1

Mac OS X (Mountain Lion, 10.8)

Page 40: msumobi2. Лекция 1

Как запустить Mac OS?

•Компьютер Mac

•Hacintosh

•Виртуалка (VMWare, VirtualBox)

Page 41: msumobi2. Лекция 1

Apple Developer Program

$99

• Отладка на устройстве• Выпуск в AppStore

Page 42: msumobi2. Лекция 1

Objective-C

Page 43: msumobi2. Лекция 1

История1981 — Object-Oriented Pre-Compiler (OOPC). Компания StepStone. Tom Love & Brad Cox

1996 — Apple покупает NeXT. Objective-C — основной язык для Mac OS.

1988 — NeXT лицензирует Objective-C

1986 — Objective-C. «Object-Oriented Programming, An Evolutionary Approach» (Brad Cox).

2007 — Objective-C — основной язык для iPhone OS

Page 44: msumobi2. Лекция 1

Основные особенности

• объектно-ориентированный• компилируется в машинный код• полностью совместим с Си

• слабо-типизированный• управление памятью основано на счетчике ссылок

Page 45: msumobi2. Лекция 1

Сначала немного Си

http://ru.wikipedia.org/wiki/Си_(язык_программирования)

Page 46: msumobi2. Лекция 1

Указателиint main(int argc, const char * argv[]){ int a = 5; int *b = &a; *b = 7; printf("%d", a);}

7

Page 47: msumobi2. Лекция 1

double add(double a, double b){ return a + b;}

int main(int argc, const char * argv[]){ double a = 5.5; double b = 7; double *arr = malloc(2 * sizeof(double)); arr[0] = a; arr[1] = b; printf("array [0] = %g, [1] = %g, add = %g", arr[0], arr[1], add(arr[0], arr[1])); free(arr);}

Функции

Page 48: msumobi2. Лекция 1

Структурыtypedef struct{ float x; float y;} Location;

double add(double a, double b){ return a + b;}

Location createLocation(float x, float y){ Location l; l.x = x; l.y = y; return l;}

int main(int argc, const char * argv[]){ Location l = createLocation(1.5, 0.5); printf("location: {%g, %g}", l.x, l.y);}

Page 49: msumobi2. Лекция 1

Перечисленияtypedef enum { UIViewAnimationCurveEaseInOut, UIViewAnimationCurveEaseIn, UIViewAnimationCurveEaseOut, UIViewAnimationCurveLinear} UIViewAnimationCurve;

UIViewAnimationCurve a = UIViewAnimationCurveLinear;printf("%d", a);

Page 50: msumobi2. Лекция 1

ПамятьКучаСтек

{ int a = 10;}{ int a = 20;}

int *a = malloc(sizeof(int) * 10);

free(a);

Page 51: msumobi2. Лекция 1

Теперь немного ООП

http://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование

Page 52: msumobi2. Лекция 1

Класс - описание внутреннего состояния + методов изменения этого состояния

Объект - экземпляр класса

Поля - состояние объекта

Методы - изменение состояния объекта

Page 53: msumobi2. Лекция 1

Класс «Работник»

- имя (строка)- возраст (целое)- пол (м/ж)- время_поступления_на_работу (дата)- время_увольнения (дата)- подчиненные (массив работников)

- уволить()- добавить подчиненного(работник)

Поля:

Методы:

Page 54: msumobi2. Лекция 1

НаследованиеКласс «Руководитель» (наследуется от «Работник»)

- подчиненные (массив работников)

- добавить подчиненного(работник)

Поля:

Методы:

Page 55: msumobi2. Лекция 1

Objective-C

Page 56: msumobi2. Лекция 1

NSString *a = [[NSString alloc] init];

NSString *b = [a copy];

[b stringByReplacingOccurrencesOfString:@" " withString:@""];

NSString *c = @"string";

[c stringByPaddingToLength:20 withString:@" " startingAtIndex:0];

Синтаксис

Page 57: msumobi2. Лекция 1

nil

• аналог null из других языков

• можно вызывать любой метод, не будет исключения

• если метод возвращает объект - вернется nil

• если метод возвращает число - вернется 0• если метод возвращает структуру - результат не определен

Page 58: msumobi2. Лекция 1

nil

NSString *a = nil;int length = [a length]; // 0NSString *m = [a mutableCopy]; // nilNSRange range = [a rangeOfString:@"a"]; // undefined!!!if (a) // if (a != nil){ NSRange r = [a rangeOfString:@"a"];}

Page 59: msumobi2. Лекция 1

BOOL

BOOL a = YES;if (a) // if (a == YES){ BOOL b = [c isEqual:d]; if (!b) // if (a == NO) { //blabla }}

Page 60: msumobi2. Лекция 1

Демонстрация XCode

Page 61: msumobi2. Лекция 1

Вступительное задание- запустить Mac OS- установить XCode- запустить XCode- создать проект для iPhone- написать небольшую программу в main()- прислать zip с проектом и бинарник на почту [email protected]

Page 62: msumobi2. Лекция 1

- создать текстовый файл со своим именем- создать текстовый файл со своей фамилией- добавить их в проект- прочитать в текст из файлов в разные переменные- склеить в другую переменную- вывести в консоль

Page 64: msumobi2. Лекция 1

Если успеем

Page 65: msumobi2. Лекция 1

ЧислаCGFloat a = 0.5;NSInteger b = -1;NSUInteger q = 10;

Page 66: msumobi2. Лекция 1

СтруктурыCGPoint p;p.x = 10;p.y = 20;p = CGPointMake(10, 20);

CGSize s;s.width = 100;s.height = 100;s = CGSizeMake(100, 100);

CGRect r;r.size = s;r.origin = p;r = CGRectMake(10, 20, 100, 100);

Page 67: msumobi2. Лекция 1

Стандартные классы

Page 68: msumobi2. Лекция 1

Строки

NSString NSMutableString

NSString *a = @"abc";NSString *b = [a stringByReplacingOccurrencesOfString:@"a" withString:@"b"];NSLog(@"b: %@", b);

NSMutableString *m = [b mutableCopy];NSRange r;r.length = m.length;r.location = 0;[m replaceOccurrencesOfString:@"c" withString:@"b" options:0 range:r];NSLog(@"m: %@", m);

Page 69: msumobi2. Лекция 1

Списки

NSArray NSMutableArray

NSArray *a = @[@"a", @"b", @"c"];NSString *first = a[0];NSString *last = a[[a count] - 1];

NSMutableArray *b = [a mutableCopy];[b addObject:@"r"];[b replaceObjectAtIndex:1 withObject:@"q"];[b removeObjectAtIndex:2];

Обычные упорядоченные массивы

Page 70: msumobi2. Лекция 1

Словари

NSDictionary NSMutableDictionary

NSDictionary *dict = @ { @"key1" : @"a", @"key2" : @"b" };NSString *first = dict[@"key1"];

NSMutableDictionary *m = [dict mutableCopy];m[@"key3"] = @"c";

Хранение пар «ключ-значение».Быстрый поиск значения по ключу

Page 71: msumobi2. Лекция 1

Перечисление (enumeration)

NSArray *arr = @[@"a", @"b", @"c"];

for (NSString *a in arr) { NSLog(@"%@", a);}

NSDictionary *dict = @{ @"key1" : @"a", @"key2" : @"b" };

for (NSString *key in dict){ NSString *value = dict[key]; NSLog(@"%@ - %@", key, value);}

Page 72: msumobi2. Лекция 1

ЧислаNSNumber

NSNumber *a = @(3);int b = [a intValue];

NSNumber *c = @(2.5f);float d = [c floatValue];

NSNumber *e = @(3.567);double f = [e doubleValue];

if ([a isEqualToNumber:c]) NSLog(@"equals");

Page 73: msumobi2. Лекция 1

Бинарные данные

NSData NSMutableData

NSData *data = [[NSData alloc] initWithContentsOfFile:@"data.txt"];NSInteger length = [data length];[data writeToFile:@"result.txt" atomically:YES]; NSMutableData *m = [data mutableCopy];[m appendData:data];

Хранение картинок, текстовых данных в бинарном виде и т.д.

Page 74: msumobi2. Лекция 1

NSNull

NSMutableArray *a = [[NSMutableArray alloc] init];[a addObject:[NSNull null]];

NSObject *q = [a lastObject];if (q == [NSNull null]){ //bla bla}

сохранять «пусто» в массивы и словари

Page 75: msumobi2. Лекция 1

NSValue

CGPoint p = CGPointMake(10, 20);CGRect r = CGRectMake(10, 20, 30, 40);NSValue *v1 = [NSValue valueWithCGPoint:p];NSValue *v2 = [NSValue valueWithCGRect:r];

NSArray *arr = [NSArray arrayWithObjects:v1, v2, nil];CGRect r2 = [[arr lastObject] CGRectValue];

преобразовывать структуры и другие «не объекты» в объекты