msumobi2. Лекция 1

Preview:

DESCRIPTION

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

Citation preview

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

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

Лекция 1

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

Связь

http://vk.com/msumobi2

#msumobi2

ЦелиiPhone

ЦелиiPad

ЦелиИгры

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

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

Кто это?

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

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

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

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

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

iPhone

iPad

iGuides

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

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

25 News Free

iPhone

iPad

ИНТУИТ

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

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

iPhone

iPad

AldoCoppola

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

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

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

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

Особенности

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

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

Почему iOS?

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

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

XCode

Mac OS X (Mountain Lion, 10.8)

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

•Компьютер Mac

•Hacintosh

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

Apple Developer Program

$99

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

Objective-C

История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

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

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

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

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

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

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

7

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);}

Функции

Структуры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);}

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

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

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

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

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

free(a);

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

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

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

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

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

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

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

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

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

Поля:

Методы:

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

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

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

Поля:

Методы:

Objective-C

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

NSString *b = [a copy];

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

NSString *c = @"string";

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

Синтаксис

nil

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

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

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

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

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"];}

BOOL

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

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

Вступительное задание- запустить Mac OS- установить XCode- запустить XCode- создать проект для iPhone- написать небольшую программу в main()- прислать zip с проектом и бинарник на почту gleb34@gmail.com

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

Всё!

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

Если успеем

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

Структуры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);

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

Строки

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);

Списки

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];

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

Словари

NSDictionary NSMutableDictionary

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

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

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

Перечисление (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);}

Числа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");

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

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];

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

NSNull

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

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

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

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];

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

Теперь точно всё!

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