SlideShare ist ein Scribd-Unternehmen logo
1 von 116
Downloaden Sie, um offline zu lesen
Разработка приложений для iOS




          Лекция 1
   Objective-C



                            Глеб Тарасов
Мобильная разработка, что
      изменилось?
Особенности
• Высокие ожидания пользователей
• Другие паттерны использования
• Маленький экран
• Слабый процессор, мало памяти
• Медленный интернет
• Управление жестами
Почему iOS?
Разработка под iOS
XCode
Mac OS Lion
Как запустить 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
    }
}
Числа
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 = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
NSString *first = [a objectAtIndex:0];
NSString *last = [a objectAtIndex:[a count] - 1];

NSMutableArray *b = [a mutableCopy];
[b addObject:@"r"];
[b replaceObjectAtIndex:1 withObject:@"q"];
[b removeObjectAtIndex:2];
Словари
      NSDictionary                NSMutableDictionary
            Хранение пар «ключ-значение».
           Быстрый поиск значения по ключу

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                      @"a", @"key1", @"b", @"key2", nil];
NSString *first = [dict objectForKey:@"key1"];

NSMutableDictionary *m = [dict mutableCopy];
[m setObject:@"c" forKey:@"key3"];
[m setObject:@"aa" forKey:@"key1"];
NSLog(@"m: %@", m);
Множества
          NSSet                      NSMutableSet
             Неупорядоченная коллекция.
             Быстрая проверка на contains

NSSet *s = [NSSet setWithObjects:@"a", @"b", @"c", nil];
BOOL c = [s containsObject:@"b"];

NSMutableSet *m = [s mutableCopy];
[m addObject:@"d"];
[m removeObject:@"a"];
Перечисление (enumeration)
NSArray *arr = [NSArray arrayWithObjects:
              @"a",
              @"b",
              @"c",
              nil];

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

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                      @"a", @"key1",
                      @"b", @"key2",
                      nil];

for (NSString *key in dict)
{
    NSString *value = [dict objectForKey:key];
    NSLog(@"%@ - %@", key, value);
}
Числа
                  NSNumber
NSNumber *a = [NSNumber numberWithInt:3];
int b = [a intValue];

NSNumber *c = [NSNumber numberWithFloat:2.5f];
float d = [c floatValue];

NSNumber *e = [NSNumber numberWithDouble: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];
Dot notation
Класс Rectangle
    - float width (число)
    - float height (число)
    - Location location (структура)
Rectangle *r = [[Rectangle alloc] init];
[r setWidth:10];
[r setHeight:20];

Location l;
l.x = 1;
l.y = 2;

[r setLocation:l];

NSLog(@"%g, %g, (%g, %g)",
      [r width],
      [r height],
      [r location].x,
      [r location].y);
Dot notation
Rectangle *r = [[Rectangle alloc] init];
r.width = 10;
r.height = 20;
Location l = {1, 2};
r.location = l;

NSLog(@"%g, %g, (%g, %g)",
    r.width,
    r.height,
    r.location.x,
    r.location.y);
Собственные классы
Собственные классы


               User.h
Собственные классы
@interface User




                          User.h
@end
Собственные классы
@interface User : NSObject




                             User.h
@end
Собственные классы
@interface User : NSObject
{
       NSString *_name;
}
                             User.h
@end
Собственные классы
@interface User : NSObject
{
       NSString *_name;
}
- (void)setName:(NSString *)name;   User.h
- (NSString *)name;

@end
Собственные классы
@interface User : NSObject
{
       NSString *_name;
}
- (void)setName:(NSString *)name;   User.h
- (NSString *)name;

@end




                                    User.m
Собственные классы
@interface User : NSObject
{
       NSString *_name;
}
- (void)setName:(NSString *)name;   User.h
- (NSString *)name;

@end


@implementation User



                                    User.m



@end
Собственные классы
@interface User : NSObject
{
       NSString *_name;
}
- (void)setName:(NSString *)name;   User.h
- (NSString *)name;

@end


@implementation User
- (void)setName:(NSString *)name
{

}
    _name = name;
                                    User.m
- (NSString *)name
{
    return _name;
}
@end
User.h
User.h
#import <Foundation/Foundation.h>
User.h
#import <Foundation/Foundation.h>

@interface User




@end
User.h
#import <Foundation/Foundation.h>

@interface User : NSObject




@end
User.h
#import <Foundation/Foundation.h>

@interface User : NSObject
{
       NSInteger _age;
}




@end
User.h
#import <Foundation/Foundation.h>

@interface User : NSObject
{
       NSInteger _age;
}
@property(nonatomic, strong) NSString *name;

@property(nonatomic) NSInteger age;




@end
User.h
#import <Foundation/Foundation.h>

@interface User : NSObject
{
       NSInteger _age;
}
@property(nonatomic, strong) NSString *name;

@property(nonatomic) NSInteger age;
- (void)setAge:(NSInteger)age;
- (NSInteger)age;




@end
User.h
#import <Foundation/Foundation.h>

@interface User : NSObject
{
       NSInteger _age;
}
@property(nonatomic, strong) NSString *name;

@property(nonatomic) NSInteger age;
- (void)setAge:(NSInteger)age;
- (NSInteger)age;

- (void)deleteProfile;




@end
User.h
#import <Foundation/Foundation.h>

@interface User : NSObject
{
       NSInteger _age;
}
@property(nonatomic, strong) NSString *name;

@property(nonatomic) NSInteger age;
- (void)setAge:(NSInteger)age;
- (NSInteger)age;

- (void)deleteProfile;

- (void)postCommentWithText:(NSString *)text;

- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;


@end
User.m
#import "User.h"

@implementation User
                       User.m




@end
#import "User.h"

@implementation User
                            User.m
@synthesize age = _age;
@synthesize name = _name;




@end
#import "User.h"

@implementation User
                            User.m
@synthesize age = _age;
@synthesize name = _name;

- (void)setAge:(NSInteger)age
{
    _age = age;
    NSLog(@"Установили возраст %d", age);
}




@end
#import "User.h"

@implementation User
                            User.m
@synthesize age = _age;
@synthesize name = _name;

- (void)setAge:(NSInteger)age
{
    _age = age;
    NSLog(@"Установили возраст %d", age);
}

- (void)deleteProfile
{
    // удаляем из базы
    NSString *name = [self name];
    NSLog(@"Пользователь %@ удален", name);
}

- (void)postCommentWithText:(NSString *)text
{
    [self postCommentWithTopic:@"" andText:text];
}

- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text
{
    NSLog(@"Пользователь %@ (возраст: %d) с темой %@", self.name,
         self.age, topic);
}

@end
Admin.h
Admin.h
#import "User.h"

@interface Admin : User

- (void)deleteComment:(NSInteger)key;

@end
Admin.h
#import "User.h"

@interface Admin : User

- (void)deleteComment:(NSInteger)key;

@end


Admin.m
Admin.h
#import "User.h"

@interface Admin : User

- (void)deleteComment:(NSInteger)key;

@end


Admin.m
#import "Admin.h"

@implementation Admin

- (void)deleteComment:(NSInteger)key
{
    //удаляем из базы
    NSLog(@"Комментарий с ключом %d удален", key);

    // оставляем комментарий, об удалении
    [self postCommentWithTopic:@"От админа"
                       andText:@"Удалил коммент за хамство"];
}
Инициализация объектов
Инициализация объектов
User *user = [[User alloc] init];
Инициализация объектов
User *user = [[User alloc] init];
user.age = 34;
[user setName:@"UserName"];
Инициализация объектов
User *user = [[User alloc] init];
user.age = 34;
[user setName:@"UserName"];


NSString *comment = @"БлаБлаБла";

[user postCommentWithText:comment];

[user deleteProfile];
Собственный инициализатор
Собственный инициализатор
- (id)initWithName:(NSString *)name
{
    self = [super init];
    if (self)
    {
        self.name = name;
    }
    return self;
}
Собственный инициализатор
- (id)initWithName:(NSString *)name
{
    self = [super init];
    if (self)
    {
        self.name = name;
    }
    return self;
}


- (id)init
{
    return [self initWithName:@"Имя по умолчанию"];
}
Методы класса
Методы класса
В файле Admin.h:
Методы класса
В файле Admin.h:
+ (Admin *)createAdmin;
Методы класса
В файле Admin.h:
+ (Admin *)createAdmin;

В файле Admin.m:
Методы класса
В файле Admin.h:
+ (Admin *)createAdmin;

В файле Admin.m:
+ (Admin *)createAdmin
{
    Admin *admin = [[Admin alloc] initWithName:@"Админ Админович"];
    admin.age = 34;
    return admin;
}
Методы класса
В файле Admin.h:
+ (Admin *)createAdmin;

В файле Admin.m:
+ (Admin *)createAdmin
{
    Admin *admin = [[Admin alloc] initWithName:@"Админ Админович"];
    admin.age = 34;
    return admin;
}


Использование:
Методы класса
 В файле Admin.h:
 + (Admin *)createAdmin;

 В файле Admin.m:
+ (Admin *)createAdmin
{
    Admin *admin = [[Admin alloc] initWithName:@"Админ Админович"];
    admin.age = 34;
    return admin;
}


Использование:
Admin *admin = [Admin createAdmin];
[admin deleteComment:10];
Тип id
Селекторы
NSString *a = @"a";
id b = a;
if ([b respondsToSelector:@selector(isEqualToString:)])
{
@ BOOL e = [b isEqualToString:@"a"];
}

SEL s = @selector(removeAllObjects);
NSMutableArray *arr = ...;
[arr performSelector:s];
[arr makeObjectsPerformSelector:s]
Классы
NSString *a = @"a";
id b = a;
if ([b isKindOfClass:[NSString class]])
{
@ BOOL e = [b isEqualToString:@"a"];
}
Протоколы
Протоколы
@protocol SendMessageProtocol

- (void)sendMessage:(NSString *)message;

@end
Протоколы
@protocol SendMessageProtocol

- (void)sendMessage:(NSString *)message;

@end

@interface User : NSObject<SendMessageProtocol>

@end
Протоколы
@protocol SendMessageProtocol

- (void)sendMessage:(NSString *)message;

@end

@interface User : NSObject<SendMessageProtocol>

@end

@implementation User

- (void)sendMessage:(NSString *)message
{
    // send message
}

@end
Протоколы
@protocol SendMessageProtocol

- (void)sendMessage:(NSString *)message;

@end

@interface User : NSObject<SendMessageProtocol>

@end

@implementation User

- (void)sendMessage:(NSString *)message
{
    // send message
}

@end


id<SendMessageProtocol> sender = [[User alloc] init];
[sender sendMessage:@"message"];
Категории
Категории
@interface NSString(User)

- (User *)userWithName;

@end
Категории
@interface NSString(User)

- (User *)userWithName;

@end

@implementation NSString(User)

- (User *)userWithName
{
    User *result = [[User alloc] init];
    result.name = self;
    return result;
}

@end
Категории
@interface NSString(User)

- (User *)userWithName;

@end

@implementation NSString(User)

- (User *)userWithName
{
    User *result = [[User alloc] init];
    result.name = self;
    return result;
}

@end



User *test = [@"Username" userWithName];
Память

retain/release     ARC
retainCount
NSMutableString *a = [[NSMutableString alloc] init];
NSLog(@"%d", [a retainCount]);
[a appendString:@"a"];
[a retain];
NSLog(@"%d", [a retainCount]);            1
[a release];
NSLog(@"%d", [a retainCount]);
[a release];
                                          2
                                         1
                        dealloc
retain setter
- (void)setName:(NSString *)name
{
    NSString *prev = _name;
    _name = name;
    [_name retain];
    [prev release];
}

- (void)dealloc
{
    [super dealloc];
    [_name release];
}
autorelease
- (NSString *)fullName
{
    NSMutableString *s = [[NSMutableString alloc] init];
    [s appendString:[self name]];
    [s appendString:@" "];
    [s appendString:[self secondName]];
    return [s autorelease];
}

- (void)main
{
    NSString *name = [self fullName];
    NSLog(@"%@", name);
}


 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

 ...

 [pool drain];
retain/release
• после init счетчик ссылок равен 1
• когда объекту изменяют внутреннее поле
  через retain-setter: retain новому
  значению, release старому
• когда в массив или словарь добавляют
  элемент - ему retain
• когда удаляют элемент - release ему
ARC
           retain    release autorelease
                    [super dealloc]

• автоматически генерится dealloc
• автоматический retain/release при присваивании
  полей
• автоматический retain и autorelease для
  возвращаемого значения из метода
• автоматический release для локальной
  переменной при завершении области видимости
ARC
NSString *a = [[NSString alloc] init];
NSLog(@"%@", a);
                          release
- (void)setName:(NSString *)name
{                                     [super dealloc];
    _name = name;
}                                     release всех полей
                       retain
          release               - (void)dealloc
                                {
                                    NSLog(@"dealloc");
                                }
Цикл ссылок
       Car                      Wheel
       NSArray *_wheels        Car *car

Car *car = [[[Car alloc] init] autorelease];
Wheel *wheel = [[[Wheel alloc] init] autorelease];

[wheel setCar:car];
[car addWheel:wheel];         retainCount = 2
                           после autorelease будет
                              retainCount = 1
Модификаторы
       • strong
       • weak
       • unsafe_unretained
       • copy
@interface Car : NSObject

@property(strong, nonatomic) NSArray *wheels;

@end

@interface Wheel : NSObject

@property(weak, nonatomic) Car *car;

@end
Objective-C style guide
• Локальные переменные: myLocalVariable
• Свойства: myProperty
• Классы: MyClass
• Методы: doSomethingWith:
• Внутренние переменные:
   • _myLocal
   • myLocal_
   • myLocal
Демонстрация
Вопросы на засыпку

Какой метод управления памятью
    используется в языке Си?

       А в Objective-C?
Чем отличаются строки
 "string1" и @"string2"
Как сохранить число 5 в массив?
Как создать объект?
Что такое «strong» и «weak»?

   Чем они отличаются?
Всё!

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

Weitere ähnliche Inhalte

Was ist angesagt?

Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Platonov Sergey
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)Smolensk Computer Science Club
 
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...solit
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
 
Разведочный анализ данных: создание графиков в системе R
Разведочный анализ данных: создание графиков в системе RРазведочный анализ данных: создание графиков в системе R
Разведочный анализ данных: создание графиков в системе RSergey Mastitsky
 
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Platonov Sergey
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPython Meetup
 
Python dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееPython dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееdelimitry
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в DjangoMoscowDjango
 
Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Theoretical mechanics department
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6Dmitry Soshnikov
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Sergey Schetinin
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonPython Meetup
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка DjangoVladimir Rudnyh
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 

Was ist angesagt? (19)

Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)
 
Charming python sc2-8
Charming python sc2-8Charming python sc2-8
Charming python sc2-8
 
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
 
Основы языка R
Основы языка RОсновы языка R
Основы языка R
 
Разведочный анализ данных: создание графиков в системе R
Разведочный анализ данных: создание графиков в системе RРазведочный анализ данных: создание графиков в системе R
Разведочный анализ данных: создание графиков в системе R
 
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
 
Python dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееPython dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущее
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
 
Основы NumPy
Основы NumPyОсновы NumPy
Основы NumPy
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка Django
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
PHP7 - что ожидать?
PHP7 - что ожидать?PHP7 - что ожидать?
PHP7 - что ожидать?
 

Ähnlich wie Школа-студия разработки приложений для iOS. Лекция 1. Objective-C

Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSГлеб Тарасов
 
7 кашкута
7 кашкута7 кашкута
7 кашкутаCodeFest
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному кодуVasiliy Deynega
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиГлеб Тарасов
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиГлеб Тарасов
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
 
Functional Reactive Programming
Functional Reactive ProgrammingFunctional Reactive Programming
Functional Reactive ProgrammingSerg Buglakov
 
2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭOleg Parinov
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кодаAndrey Karpov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода Pavel Tsukanov
 
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Yandex
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in actionYuri Trukhin
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий solit
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.Infinity
 
занятие 1
занятие 1занятие 1
занятие 1ajantis
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++mcroitor
 
Kvc, kvo
Kvc, kvoKvc, kvo
Kvc, kvoNoveo
 

Ähnlich wie Школа-студия разработки приложений для iOS. Лекция 1. Objective-C (20)

Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
 
7 кашкута
7 кашкута7 кашкута
7 кашкута
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Functional Reactive Programming
Functional Reactive ProgrammingFunctional Reactive Programming
Functional Reactive Programming
 
2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кода
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
 
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in action
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
 
Talks on collections
Talks on collectionsTalks on collections
Talks on collections
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
 
занятие 1
занятие 1занятие 1
занятие 1
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Intro to Swift techitout
Intro to Swift techitoutIntro to Swift techitout
Intro to Swift techitout
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 
Kvc, kvo
Kvc, kvoKvc, kvo
Kvc, kvo
 

Mehr von Глеб Тарасов

Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadИнтуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюИнтуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsИнтуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersИнтуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.Глеб Тарасов
 
Презентация проекта Ulect
Презентация проекта Ulect Презентация проекта Ulect
Презентация проекта Ulect Глеб Тарасов
 
Презентация для Foundation Institute
Презентация для Foundation InstituteПрезентация для Foundation Institute
Презентация для Foundation InstituteГлеб Тарасов
 
Делаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPodsДелаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPodsГлеб Тарасов
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеГлеб Тарасов
 
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеШкола-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеГлеб Тарасов
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersГлеб Тарасов
 
Глеб Тарасов. Портфолио
Глеб Тарасов. ПортфолиоГлеб Тарасов. Портфолио
Глеб Тарасов. ПортфолиоГлеб Тарасов
 
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. ИнструментыКурсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. ИнструментыГлеб Тарасов
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиГлеб Тарасов
 
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаКурсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаГлеб Тарасов
 

Mehr von Глеб Тарасов (20)

Gleb Tarasov. Portfolio
Gleb Tarasov. PortfolioGleb Tarasov. Portfolio
Gleb Tarasov. Portfolio
 
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
 
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
 
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadИнтуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
 
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюИнтуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
 
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsИнтуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
 
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersИнтуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
 
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
 
Презентация проекта Ulect
Презентация проекта Ulect Презентация проекта Ulect
Презентация проекта Ulect
 
Презентация для Foundation Institute
Презентация для Foundation InstituteПрезентация для Foundation Institute
Презентация для Foundation Institute
 
Делаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPodsДелаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPods
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
 
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеШкола-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
 
ShareKit. Evernote Dev Meetup
ShareKit. Evernote Dev MeetupShareKit. Evernote Dev Meetup
ShareKit. Evernote Dev Meetup
 
Глеб Тарасов. Портфолио
Глеб Тарасов. ПортфолиоГлеб Тарасов. Портфолио
Глеб Тарасов. Портфолио
 
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. ИнструментыКурсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
 
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаКурсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
 

Школа-студия разработки приложений для iOS. Лекция 1. Objective-C