Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Разработка приложений для iOS




                      Лекция 1

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

#msumobi2                               Глеб Тарасов
Связь

http://vk.com/msumobi2

#msumobi2
Цели
iPhone
Цели
       iPad
Цели
Игры
msumobi2. Лекция 1
Вступительное задание — 10 человек

Домашние задания — 5 человек
Кто это?
Ерундопель, Ударник,
         Орфограф, Сколькометр
                  Игры в слова для iPhone/iPad




-1 место среди платных игр в российском AppStore
-3 место в российском AppStore среди всех платных приложений
-13 место в российском AppStore среди бесплатных приложений
iPhone
msumobi2. Лекция 1
iPad
msumobi2. Лекция 1
msumobi2. Лекция 1
iGuides
Приложение под iPhone/iPad для чтения новостей с сайта http://iguides.ru




                     1 место в российском
                    AppStore в категории Top
                         25 News Free
iPhone
iPad
ИНТУИТ

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




                   2 место в российском AppStore в
                    категории Top 25 Education Free
iPhone
msumobi2. Лекция 1
iPad
msumobi2. Лекция 1
AldoCoppola
Приложение электронной записи клиентов для сети
       салонов красоты «AldoCoppola».
msumobi2. Лекция 1
msumobi2. Лекция 1
msumobi2. Лекция 1
Остальное тут:
http://www.slideshare.net/gtarasov/ss-12299478
Мобильная разработка, что
      изменилось?
msumobi2. Лекция 1
msumobi2. Лекция 1
msumobi2. Лекция 1
msumobi2. Лекция 1
Особенности
• Высокие ожидания пользователей
• Другие паттерны использования
• Маленький экран
• Слабый процессор, мало памяти
• Медленный интернет
• Управление жестами
Почему iOS?
msumobi2. Лекция 1
Зачем вам это?
Разработка под 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

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

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

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

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 = malloc(sizeof(int) * 10);
    int a = 10;
}                   free(a);
{
    int a = 20;
}
Теперь немного ООП




http://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование
Класс - описание внутреннего состояния + методов
изменения этого состояния

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

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

Методы - изменение состояния объекта
Класс «Работник»
 Поля:
- имя (строка)
- возраст (целое)
- пол (м/ж)
- время_поступления_на_работу (дата)
- время_увольнения (дата)
- подчиненные (массив работников)
 Методы:
- уволить()
- добавить подчиненного(работник)
Наследование
Класс «Руководитель» (наследуется от
«Работник»)
   Поля:
 - подчиненные (массив работников)

  Методы:
 - добавить подчиненного(работник)
Objective-C
Синтаксис
NSString *a = [[NSString alloc] init];

NSString *b = [a copy];

NSString *c = @"string";

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


[c stringByPaddingToLength:20
                withString:@" "
           startingAtIndex:0];
nil
• аналог null из других языков
• можно вызывать любой метод, не будет
  исключения
• если метод возвращает объект - вернется nil
• если метод возвращает число - вернется 0
• если метод возвращает структуру - результат не
  определен
nil
NSString *a = nil;
int length = [a length]; // 0
NSString *m = [a mutableCopy]; // nil
NSRange 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.com
       twitter.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.com
        twitter.com/pilot34

More Related Content

msumobi2. Лекция 1

  • 1. Разработка приложений для iOS Лекция 1 Знакомство, Введение в Objective-C #msumobi2 Глеб Тарасов
  • 4. Цели iPad
  • 7. Вступительное задание — 10 человек Домашние задания — 5 человек
  • 9. Ерундопель, Ударник, Орфограф, Сколькометр Игры в слова для iPhone/iPad -1 место среди платных игр в российском AppStore -3 место в российском AppStore среди всех платных приложений -13 место в российском AppStore среди бесплатных приложений
  • 12. iPad
  • 15. iGuides Приложение под iPhone/iPad для чтения новостей с сайта http://iguides.ru 1 место в российском AppStore в категории Top 25 News Free
  • 17. iPad
  • 18. ИНТУИТ Мобильное приложение для Национального Открытого Университета http://intuit.ru. Чтение лекций, просмотр видео, прохождение тестов и сдача экзаменов 2 место в российском AppStore в категории Top 25 Education Free
  • 21. iPad
  • 23. AldoCoppola Приложение электронной записи клиентов для сети салонов красоты «AldoCoppola».
  • 33. Особенности • Высокие ожидания пользователей • Другие паттерны использования • Маленький экран • Слабый процессор, мало памяти • Медленный интернет • Управление жестами
  • 38. XCode
  • 39. Mac OS X (Mountain Lion, 10.8)
  • 40. Как запустить Mac OS? •Компьютер Mac • Hacintosh • Виртуалка (VMWare,VirtualBox)
  • 41. Apple Developer Program $99 • Отладка на устройстве • Выпуск в AppStore
  • 43. История 1981 — Object-Oriented Pre-Compiler (OOPC). Компания StepStone. Tom Love & Brad Cox 1986 — Objective-C. «Object-Oriented Programming, An Evolutionary Approach» (Brad Cox). 1988 — NeXT лицензирует Objective-C 1996 — Apple покупает NeXT. Objective-C — основной язык для Mac OS. 2007 — Objective-C — основной язык для iPhone OS
  • 44. Основные особенности • объектно-ориентированный • компилируется в машинный код • полностью совместим с Си • слабо-типизированный • управление памятью основано на счетчике ссылок
  • 46. Указатели int main(int argc, const char * argv[]) { int a = 5; int *b = &a; *b = 7; printf("%d", a); } 7
  • 47. Функции 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); }
  • 48. 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); }
  • 49. Перечисления typedef enum { UIViewAnimationCurveEaseInOut, UIViewAnimationCurveEaseIn, UIViewAnimationCurveEaseOut, UIViewAnimationCurveLinear } UIViewAnimationCurve; UIViewAnimationCurve a = UIViewAnimationCurveLinear; printf("%d", a);
  • 50. Память Стек Куча { int *a = malloc(sizeof(int) * 10); int a = 10; } free(a); { int a = 20; }
  • 52. Класс - описание внутреннего состояния + методов изменения этого состояния Объект - экземпляр класса Поля - состояние объекта Методы - изменение состояния объекта
  • 53. Класс «Работник» Поля: - имя (строка) - возраст (целое) - пол (м/ж) - время_поступления_на_работу (дата) - время_увольнения (дата) - подчиненные (массив работников) Методы: - уволить() - добавить подчиненного(работник)
  • 54. Наследование Класс «Руководитель» (наследуется от «Работник») Поля: - подчиненные (массив работников) Методы: - добавить подчиненного(работник)
  • 56. Синтаксис NSString *a = [[NSString alloc] init]; NSString *b = [a copy]; NSString *c = @"string"; [b stringByReplacingOccurrencesOfString:@" " withString:@""]; [c stringByPaddingToLength:20 withString:@" " startingAtIndex:0];
  • 57. nil • аналог null из других языков • можно вызывать любой метод, не будет исключения • если метод возвращает объект - вернется nil • если метод возвращает число - вернется 0 • если метод возвращает структуру - результат не определен
  • 58. nil NSString *a = nil; int length = [a length]; // 0 NSString *m = [a mutableCopy]; // nil NSRange range = [a rangeOfString:@"a"]; // undefined!!! if (a) // if (a != nil) { NSRange r = [a rangeOfString:@"a"]; }
  • 59. BOOL BOOL a = YES; if (a) // if (a == YES) { BOOL b = [c isEqual:d]; if (!b) // if (a == NO) { //blabla } }
  • 61. Вступительное задание - запустить Mac OS - установить XCode - запустить XCode - создать проект для iPhone - написать небольшую программу в main() - прислать zip с проектом и бинарник на почту gleb34@gmail.com
  • 62. - создать текстовый файл со своим именем - создать текстовый файл со своей фамилией - добавить их в проект - прочитать в текст из файлов в разные переменные - склеить в другую переменную - вывести в консоль
  • 63. Всё! Глеб Тарасов gleb34@gmail.com twitter.com/pilot34
  • 65. Числа CGFloat a = 0.5; NSInteger b = -1; NSUInteger q = 10;
  • 66. Структуры 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);
  • 68. Строки 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);
  • 69. Списки 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];
  • 70. Словари NSDictionary NSMutableDictionary Хранение пар «ключ-значение». Быстрый поиск значения по ключу NSDictionary *dict = @ { @"key1" : @"a", @"key2" : @"b" }; NSString *first = dict[@"key1"]; NSMutableDictionary *m = [dict mutableCopy]; m[@"key3"] = @"c";
  • 71. Перечисление (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); }
  • 72. Числа 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");
  • 73. Бинарные данные 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];
  • 74. NSNull сохранять «пусто» в массивы и словари NSMutableArray *a = [[NSMutableArray alloc] init]; [a addObject:[NSNull null]]; NSObject *q = [a lastObject]; if (q == [NSNull null]) { //bla bla }
  • 75. 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];
  • 76. Теперь точно всё! Глеб Тарасов gleb34@gmail.com twitter.com/pilot34