SlideShare a Scribd company logo
1 of 37
Download to read offline
squeek school
Разработка приложений для iOS
          занятие #2
http://school.squeek.ru
Пронин Сергей
Empatika, Software Engineer

Высшая Школа Экономики,
 программная инженерия

sergey.pronin@empatika.com
основы Objective-C
Objective-C

• ООП
• Синтаксис
• Сообщения
• Управление памятью
• Основные классы (NSString, NSArray,
  NSDictionary)
Практика
•   Класс - Stack (стэк)

•   Добавить объект в стэк

•   init, initWithArray:

•   Дать самый верхний (удаляется)

•   Количество элементов

•   Выдать объединенную строку

•   Есть ли элемент или нет

•
множественные init


- (id)init;
- (id)initWithName:(NSString *)name;
- (id)initWithName:(NSString *)name age:(int)age;
управление объектом

• Выделение памяти - alloc
• Освобождение памяти - dealloc
• dealloc никогда не вызывается
  самостоятельно! (почти)
подсчет использования
• Живой пока count >0
• alloc и copy создают объект с count=1
• retain увеличивает count на 1
• release уменьшает count на 1
• когда count=0 => dealloc
• retainCount
пример
Person *person = nil;
person = [[Person alloc] init];

[person setName:@“John Galt”];
[person setAge:32];
[person castBallot];
[person doSomethingElse];

[person release];
что будет?

Person *person = [[Person alloc] init];
// ...
[person release];
[person doSomething];
собственный dealloc
       метод
#import "Person.h"

@implementation Person

- (void)dealloc {
  // ...

  [super dealloc]; //Только здесь!
} @end
владение объектом
#import <Foundation/Foundation.h>

@interface Person : NSObject {
  NSString *name;
  int age;
}

- (NSString *)name;
- (void)setName:(NSString *)value;
- (int)age;
- (void)setAge:(int)age;
- (BOOL)canLegallyVote;
- (void)castBallot;
@end
владение объектом
#import "Person.h"

@implementation Person
- (NSString *)name {
  return name;
}
- (void)setName:(NSString *)newName {
if (name != newName) {
  [name release];                       зачем проверка?
  name = [newName retain];
} @end
второй вариант
#import "Person.h"

@implementation Person
- (NSString *)name {
return name;
}
- (void)setName:(NSString *)newName {
if (name != newName) {
[name release];
name = [newName copy];
} @end
освобождение памяти
#import "Person.h"

@implementation Person

- (void)dealloc {
  [name release];
  [super dealloc];
} @end
autorelease

- (NSString *)fullName {
   NSString *result;
   result = [[NSString alloc] initWithFormat:@“%@ %@”, firstName, lastName];
   return result;
   }



                        утечка памяти!
                    создали, но не уследили
autorelease

- (NSString *)fullName {
   NSString *result;
   result = [[NSString alloc] initWithFormat:@“%@ %@”, firstName, lastName];

  [result release];

  return result;
  }


                           слишком рано!
autorelease

- (NSString *)fullName {
   NSString *result;
   result = [[NSString alloc] initWithFormat:@“%@ %@”, firstName, lastName];

  [result autorelease];

  return result;
  }


                                   ok!
Autorelease Pools (in pictures)

                 механизм autorelease




                 pp                   zed                                   nt               t
          ch
               a
                                  ali                   nib               e                en          pp
        n                      iti                ain                   ev               ev        it a
      au                    in                                       or
                                                                                     dle         Ex
     L
                       pp                      adm               it f              n
                      A                     Lo                Wa                 Ha

Tuesday, January 12, 2010
комильфо


• alloc, new или copy возвращают не
  autorelease объект
• остальные - autorelease
нет autorelease!
• когда нужно хранить объект долго
• вызываем [object retain]
{
    name = [NSMutableString string];
    ...
    [name retain];
}

//...
{
  [name release];
}
cвойства

• Доступ к полям объекта
• Простота getter/setter
• Определение политики использования
• Но! можно переопределить get и set
декларация свойств
#import <Foundation/Foundation.h>

@interface Person : NSObject {
  NSString *name;
  int age;
}

@property int age;
@property (copy) NSString *name;
@property (readonly) BOOL canLegallyVote;
- (void)castBallot;

@end
synthesize
@implementation Person

@synthesize age;
@synthesize name;

- (BOOL)canLegallyVote {
  return (age > 17);
}

@end
атрибуты свойств
•   @property int age;

•   @property (readonly) BOOL canLegallyVote

•   @property (assign) NSString *name;

•   @property (retain) NSString *name;

•   @property (copy) NSString *name;

•   можно самим создать get и set
.dot синтаксис


• object.property = 2;
• int number = object.property;
осторожно с dot
в header:
@property int age;

в implementation:
@implementation Person
- (void)setAge:(int)newAge {
  self.age = newAge;
@end

            Что произойдет?
@protocol Locking   протоколы
- (void)lock;
- (void)unlock;
@optional
- (void)open;
@end

@interface SomeClass : SomeSuperClass <Locking>
//...
@end
                - setMyValue:(id) foo;
      сравни
                - setMyValue:(id <aProtocol>) foo;
основы Objective-C


done!
Основы разработки
• MVC
• Views,ViewControllers
• Жизненный цикл
• Xcode 4, Xcode 3 + Interface Builder
• UIKit framework
анатомия приложения

• Компилированный код
• Nib файл ( UI элементы + связи)
• Ресурсы (изображения, звуки)
• Info.plist файл - конфигурация
  приложения
UIKit Framework
• базовый framework
• стандартные элементы
• запускает приложение и контролирует
  жизненный цикл приложения
• доступ к объекту UIApplication:
  [UIApplication sharedApplication];
• Управление статус-баром, иконкой
  приложения
делегаты

• вместо наследования предоставляем
  делегат с реализованными методами

• используется в UIApplication ■
  UITableView ■ UITextField
UIApplicationDelegate
           • Xcode создает самостоятельно
           • участие в жизни приложения
           • реализует методы, которые вызывает
               UIApplication
-   (void)applicationDidFinishLaunching:(UIApplication *)application;
-   (void)applicationWillTerminate:(UIApplication *)application;
-   (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
-   (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;
Info.plist file
• Описание настроек приложения
 -   Icon appearance
 -   Status bar style (default, black, hidden)
 -   Orientation
 -   Uses Wifi networking
 -   System Requirements
Xcode + Hello World!



  Xcode

More Related Content

Viewers also liked

Cocoa Design Patterns in Swift
Cocoa Design Patterns in SwiftCocoa Design Patterns in Swift
Cocoa Design Patterns in SwiftMichele Titolo
 
Генетические алгоритмы
Генетические алгоритмыГенетические алгоритмы
Генетические алгоритмыOleg Parinov
 
'Real agile' coaching session
'Real agile'   coaching session'Real agile'   coaching session
'Real agile' coaching sessionOleg Parinov
 
Beginning iPhone Development
Beginning iPhone DevelopmentBeginning iPhone Development
Beginning iPhone Developmentsgleadow
 
tvOS, The Focus Engine, and Swift
tvOS, The Focus Engine, and SwifttvOS, The Focus Engine, and Swift
tvOS, The Focus Engine, and SwiftEvan Maloney
 
Denis Lebedev, Swift
Denis  Lebedev, SwiftDenis  Lebedev, Swift
Denis Lebedev, SwiftYandex
 
iOS 10 - What you need to know
iOS 10 - What you need to knowiOS 10 - What you need to know
iOS 10 - What you need to knowThe App Business
 
Как не выстрелить себе в ногу из конечного автомата / Александр Сычев (RAMBL...
Как не выстрелить себе в ногу из конечного автомата /  Александр Сычев (RAMBL...Как не выстрелить себе в ногу из конечного автомата /  Александр Сычев (RAMBL...
Как не выстрелить себе в ногу из конечного автомата / Александр Сычев (RAMBL...Ontico
 
A swift introduction to Swift
A swift introduction to SwiftA swift introduction to Swift
A swift introduction to SwiftGiordano Scalzo
 
iOS vs Android. Взгляд разработчика
iOS vs Android. Взгляд разработчикаiOS vs Android. Взгляд разработчика
iOS vs Android. Взгляд разработчикаSergey Kopov
 
To Swift 2...and Beyond!
To Swift 2...and Beyond!To Swift 2...and Beyond!
To Swift 2...and Beyond!Scott Gardner
 
SV-ios-objc-to-swift
SV-ios-objc-to-swiftSV-ios-objc-to-swift
SV-ios-objc-to-swiftRandy Scovil
 
Swift Programming Language
Swift Programming LanguageSwift Programming Language
Swift Programming LanguageGiuseppe Arici
 

Viewers also liked (17)

iOS 9 Search
iOS 9 SearchiOS 9 Search
iOS 9 Search
 
Cocoa Design Patterns in Swift
Cocoa Design Patterns in SwiftCocoa Design Patterns in Swift
Cocoa Design Patterns in Swift
 
информатика. ос
информатика. осинформатика. ос
информатика. ос
 
Генетические алгоритмы
Генетические алгоритмыГенетические алгоритмы
Генетические алгоритмы
 
'Real agile' coaching session
'Real agile'   coaching session'Real agile'   coaching session
'Real agile' coaching session
 
Beginning iPhone Development
Beginning iPhone DevelopmentBeginning iPhone Development
Beginning iPhone Development
 
tvOS, The Focus Engine, and Swift
tvOS, The Focus Engine, and SwifttvOS, The Focus Engine, and Swift
tvOS, The Focus Engine, and Swift
 
Denis Lebedev, Swift
Denis  Lebedev, SwiftDenis  Lebedev, Swift
Denis Lebedev, Swift
 
iOS 10 - What you need to know
iOS 10 - What you need to knowiOS 10 - What you need to know
iOS 10 - What you need to know
 
Swift Introduction
Swift IntroductionSwift Introduction
Swift Introduction
 
Как не выстрелить себе в ногу из конечного автомата / Александр Сычев (RAMBL...
Как не выстрелить себе в ногу из конечного автомата /  Александр Сычев (RAMBL...Как не выстрелить себе в ногу из конечного автомата /  Александр Сычев (RAMBL...
Как не выстрелить себе в ногу из конечного автомата / Александр Сычев (RAMBL...
 
A swift introduction to Swift
A swift introduction to SwiftA swift introduction to Swift
A swift introduction to Swift
 
iOS vs Android. Взгляд разработчика
iOS vs Android. Взгляд разработчикаiOS vs Android. Взгляд разработчика
iOS vs Android. Взгляд разработчика
 
To Swift 2...and Beyond!
To Swift 2...and Beyond!To Swift 2...and Beyond!
To Swift 2...and Beyond!
 
Bringing swift to cloud
Bringing swift to cloudBringing swift to cloud
Bringing swift to cloud
 
SV-ios-objc-to-swift
SV-ios-objc-to-swiftSV-ios-objc-to-swift
SV-ios-objc-to-swift
 
Swift Programming Language
Swift Programming LanguageSwift Programming Language
Swift Programming Language
 

More from Oleg Parinov

Oleg+olga product meetup
Oleg+olga product meetupOleg+olga product meetup
Oleg+olga product meetupOleg Parinov
 
[Технопарк] Управление продуктом-1
[Технопарк] Управление продуктом-1[Технопарк] Управление продуктом-1
[Технопарк] Управление продуктом-1Oleg Parinov
 
[Технопарк] Управление продуктом-2
[Технопарк] Управление продуктом-2[Технопарк] Управление продуктом-2
[Технопарк] Управление продуктом-2Oleg Parinov
 
[Технопарк] Управление продуктом-3
[Технопарк] Управление продуктом-3[Технопарк] Управление продуктом-3
[Технопарк] Управление продуктом-3Oleg Parinov
 
Управление продуктом - 5-я лекция - Технопарк@Mail.Ru
Управление продуктом - 5-я лекция - Технопарк@Mail.RuУправление продуктом - 5-я лекция - Технопарк@Mail.Ru
Управление продуктом - 5-я лекция - Технопарк@Mail.RuOleg Parinov
 
Управление продуктом - Лекция №4
Управление продуктом - Лекция №4Управление продуктом - Лекция №4
Управление продуктом - Лекция №4Oleg Parinov
 
Технопарк - Управление продуктом - Лекция №2
Технопарк - Управление продуктом - Лекция №2Технопарк - Управление продуктом - Лекция №2
Технопарк - Управление продуктом - Лекция №2Oleg Parinov
 
Лекция №2 Курса Product Management в НИУ-ВШЭ
Лекция №2 Курса Product Management в НИУ-ВШЭЛекция №2 Курса Product Management в НИУ-ВШЭ
Лекция №2 Курса Product Management в НИУ-ВШЭOleg Parinov
 
Product management - лекция №1
Product management - лекция №1Product management - лекция №1
Product management - лекция №1Oleg Parinov
 
Презентация проекта In Flow
Презентация проекта In FlowПрезентация проекта In Flow
Презентация проекта In FlowOleg Parinov
 
Pivot + Lean Startup #poSEEDelki Harvest
Pivot + Lean Startup #poSEEDelki HarvestPivot + Lean Startup #poSEEDelki Harvest
Pivot + Lean Startup #poSEEDelki HarvestOleg Parinov
 
Start-up Reality Check - Empatika в ВШЭ
Start-up Reality Check - Empatika в ВШЭStart-up Reality Check - Empatika в ВШЭ
Start-up Reality Check - Empatika в ВШЭOleg Parinov
 
2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭOleg Parinov
 

More from Oleg Parinov (17)

Oleg+olga product meetup
Oleg+olga product meetupOleg+olga product meetup
Oleg+olga product meetup
 
[Технопарк] Управление продуктом-1
[Технопарк] Управление продуктом-1[Технопарк] Управление продуктом-1
[Технопарк] Управление продуктом-1
 
[Технопарк] Управление продуктом-2
[Технопарк] Управление продуктом-2[Технопарк] Управление продуктом-2
[Технопарк] Управление продуктом-2
 
[Технопарк] Управление продуктом-3
[Технопарк] Управление продуктом-3[Технопарк] Управление продуктом-3
[Технопарк] Управление продуктом-3
 
Управление продуктом - 5-я лекция - Технопарк@Mail.Ru
Управление продуктом - 5-я лекция - Технопарк@Mail.RuУправление продуктом - 5-я лекция - Технопарк@Mail.Ru
Управление продуктом - 5-я лекция - Технопарк@Mail.Ru
 
Управление продуктом - Лекция №4
Управление продуктом - Лекция №4Управление продуктом - Лекция №4
Управление продуктом - Лекция №4
 
Технопарк - Управление продуктом - Лекция №2
Технопарк - Управление продуктом - Лекция №2Технопарк - Управление продуктом - Лекция №2
Технопарк - Управление продуктом - Лекция №2
 
Лекция №2 Курса Product Management в НИУ-ВШЭ
Лекция №2 Курса Product Management в НИУ-ВШЭЛекция №2 Курса Product Management в НИУ-ВШЭ
Лекция №2 Курса Product Management в НИУ-ВШЭ
 
Product management - лекция №1
Product management - лекция №1Product management - лекция №1
Product management - лекция №1
 
Презентация проекта In Flow
Презентация проекта In FlowПрезентация проекта In Flow
Презентация проекта In Flow
 
Pivot + Lean Startup #poSEEDelki Harvest
Pivot + Lean Startup #poSEEDelki HarvestPivot + Lean Startup #poSEEDelki Harvest
Pivot + Lean Startup #poSEEDelki Harvest
 
Instagram Design
Instagram DesignInstagram Design
Instagram Design
 
Start-up Reality Check - Empatika в ВШЭ
Start-up Reality Check - Empatika в ВШЭStart-up Reality Check - Empatika в ВШЭ
Start-up Reality Check - Empatika в ВШЭ
 
занятие8
занятие8занятие8
занятие8
 
занятие7
занятие7занятие7
занятие7
 
занятие6
занятие6занятие6
занятие6
 
2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ
 

Squeek school 2