Upload
-
View
855
Download
1
Embed Size (px)
DESCRIPTION
Разработка мобильных приложений для iOS
Citation preview
Знакомство,Введение в Objective-C
Разработка приложений для iOS
Лекция 1
Глеб Тарасов#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 с проектом и бинарник на почту [email protected]
- создать текстовый файл со своим именем- создать текстовый файл со своей фамилией- добавить их в проект- прочитать в текст из файлов в разные переменные- склеить в другую переменную- вывести в консоль
Всё!
Глеб Тарасов[email protected]/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];
преобразовывать структуры и другие «не объекты» в объекты
Теперь точно всё!
Глеб Тарасов[email protected]/pilot34