msumobi2. Лекция 1
DESCRIPTION
Разработка мобильных приложений для iOSTRANSCRIPT
![Page 1: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/1.jpg)
Знакомство,Введение в Objective-C
Разработка приложений для iOS
Лекция 1
Глеб Тарасов#msumobi2
![Page 3: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/3.jpg)
ЦелиiPhone
![Page 4: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/4.jpg)
ЦелиiPad
![Page 5: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/5.jpg)
ЦелиИгры
![Page 6: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/6.jpg)
![Page 7: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/7.jpg)
Вступительное задание — 10 человек
Домашние задания — 5 человек
![Page 8: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/8.jpg)
Кто это?
![Page 9: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/9.jpg)
Ерундопель, Ударник, Орфограф, Сколькометр
Игры в слова для iPhone/iPad
-1 место среди платных игр в российском AppStore
-3 место в российском AppStore среди всех платных приложений
-13 место в российском AppStore среди бесплатных приложений
![Page 10: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/10.jpg)
iPhone
![Page 11: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/11.jpg)
![Page 12: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/12.jpg)
iPad
![Page 13: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/13.jpg)
![Page 14: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/14.jpg)
![Page 15: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/15.jpg)
iGuides
Приложение под iPhone/iPad для чтения новостей с сайта http://iguides.ru
1 место в российском AppStore в категории Top
25 News Free
![Page 16: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/16.jpg)
iPhone
![Page 17: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/17.jpg)
iPad
![Page 18: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/18.jpg)
ИНТУИТ
Мобильное приложение для Национального Открытого Университета http://intuit.ru. Чтение лекций, просмотр видео, прохождение тестов и сдача экзаменов
2 место в российском AppStore в категории Top 25 Education Free
![Page 19: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/19.jpg)
iPhone
![Page 20: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/20.jpg)
![Page 21: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/21.jpg)
iPad
![Page 22: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/22.jpg)
![Page 23: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/23.jpg)
AldoCoppola
Приложение электронной записи клиентов для сети салонов красоты «AldoCoppola».
![Page 24: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/24.jpg)
![Page 25: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/25.jpg)
![Page 26: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/26.jpg)
![Page 27: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/27.jpg)
http://www.slideshare.net/gtarasov/ss-12299478
Остальное тут:
![Page 28: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/28.jpg)
Мобильная разработка, что изменилось?
![Page 29: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/29.jpg)
![Page 30: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/30.jpg)
![Page 31: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/31.jpg)
![Page 32: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/32.jpg)
![Page 33: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/33.jpg)
Особенности
• Высокие ожидания пользователей• Другие паттерны использования
• Маленький экран• Слабый процессор, мало памяти• Медленный интернет• Управление жестами
![Page 34: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/34.jpg)
Почему iOS?
![Page 35: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/35.jpg)
![Page 36: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/36.jpg)
Зачем вам это?
![Page 37: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/37.jpg)
Разработка под iOS
![Page 38: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/38.jpg)
XCode
![Page 39: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/39.jpg)
Mac OS X (Mountain Lion, 10.8)
![Page 40: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/40.jpg)
Как запустить Mac OS?
•Компьютер Mac
•Hacintosh
•Виртуалка (VMWare, VirtualBox)
![Page 41: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/41.jpg)
Apple Developer Program
$99
• Отладка на устройстве• Выпуск в AppStore
![Page 42: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/42.jpg)
Objective-C
![Page 43: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/43.jpg)
История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](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/44.jpg)
Основные особенности
• объектно-ориентированный• компилируется в машинный код• полностью совместим с Си
• слабо-типизированный• управление памятью основано на счетчике ссылок
![Page 45: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/45.jpg)
Сначала немного Си
http://ru.wikipedia.org/wiki/Си_(язык_программирования)
![Page 46: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/46.jpg)
Указателиint main(int argc, const char * argv[]){ int a = 5; int *b = &a; *b = 7; printf("%d", a);}
7
![Page 47: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/47.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/48.jpg)
Структуры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](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/49.jpg)
Перечисленияtypedef enum { UIViewAnimationCurveEaseInOut, UIViewAnimationCurveEaseIn, UIViewAnimationCurveEaseOut, UIViewAnimationCurveLinear} UIViewAnimationCurve;
UIViewAnimationCurve a = UIViewAnimationCurveLinear;printf("%d", a);
![Page 50: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/50.jpg)
ПамятьКучаСтек
{ int a = 10;}{ int a = 20;}
int *a = malloc(sizeof(int) * 10);
free(a);
![Page 51: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/51.jpg)
Теперь немного ООП
http://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование
![Page 52: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/52.jpg)
Класс - описание внутреннего состояния + методов изменения этого состояния
Объект - экземпляр класса
Поля - состояние объекта
Методы - изменение состояния объекта
![Page 53: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/53.jpg)
Класс «Работник»
- имя (строка)- возраст (целое)- пол (м/ж)- время_поступления_на_работу (дата)- время_увольнения (дата)- подчиненные (массив работников)
- уволить()- добавить подчиненного(работник)
Поля:
Методы:
![Page 54: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/54.jpg)
НаследованиеКласс «Руководитель» (наследуется от «Работник»)
- подчиненные (массив работников)
- добавить подчиненного(работник)
Поля:
Методы:
![Page 55: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/55.jpg)
Objective-C
![Page 56: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/56.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/57.jpg)
nil
• аналог null из других языков
• можно вызывать любой метод, не будет исключения
• если метод возвращает объект - вернется nil
• если метод возвращает число - вернется 0• если метод возвращает структуру - результат не определен
![Page 58: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/58.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/59.jpg)
BOOL
BOOL a = YES;if (a) // if (a == YES){ BOOL b = [c isEqual:d]; if (!b) // if (a == NO) { //blabla }}
![Page 60: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/60.jpg)
Демонстрация XCode
![Page 61: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/61.jpg)
Вступительное задание- запустить Mac OS- установить XCode- запустить XCode- создать проект для iPhone- написать небольшую программу в main()- прислать zip с проектом и бинарник на почту [email protected]
![Page 62: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/62.jpg)
- создать текстовый файл со своим именем- создать текстовый файл со своей фамилией- добавить их в проект- прочитать в текст из файлов в разные переменные- склеить в другую переменную- вывести в консоль
![Page 64: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/64.jpg)
Если успеем
![Page 65: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/65.jpg)
ЧислаCGFloat a = 0.5;NSInteger b = -1;NSUInteger q = 10;
![Page 66: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/66.jpg)
Структуры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](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/67.jpg)
Стандартные классы
![Page 68: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/68.jpg)
Строки
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](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/69.jpg)
Списки
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](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/70.jpg)
Словари
NSDictionary NSMutableDictionary
NSDictionary *dict = @ { @"key1" : @"a", @"key2" : @"b" };NSString *first = dict[@"key1"];
NSMutableDictionary *m = [dict mutableCopy];m[@"key3"] = @"c";
Хранение пар «ключ-значение».Быстрый поиск значения по ключу
![Page 71: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/71.jpg)
Перечисление (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](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/72.jpg)
Числа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](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/73.jpg)
Бинарные данные
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](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/74.jpg)
NSNull
NSMutableArray *a = [[NSMutableArray alloc] init];[a addObject:[NSNull null]];
NSObject *q = [a lastObject];if (q == [NSNull null]){ //bla bla}
сохранять «пусто» в массивы и словари
![Page 75: msumobi2. Лекция 1](https://reader033.vdocuments.net/reader033/viewer/2022051817/54805239b4af9f324f8b4605/html5/thumbnails/75.jpg)
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];
преобразовывать структуры и другие «не объекты» в объекты