Разработка приложений
   для iPhone и iPad
      занятие #3
а что было?
• Класс объекта
• NSLog()
• NSString, NSMutableString
• NSArray, NSMutableArray
• NSDictionary, NSMutableDictionary
• Свой...
вызов суперкласса
• [super doSomething];
- (void)doSomething {
 // Вызов реализации у супер-класса
  [super doSomething];
...
жизненный цикл объекта

 • Создание объектов
 • Управление памятью
 • Уничтожение объектов
создание

Allocate + Initialize

Person *person;
person = [[Person alloc] init];
создание собственного init
 #import "Person.h"

 @implementation Person

 - (id)init {
 // сначала инициализируется супер-...
множественные 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
• rel...
пример
Person *person = nil;
person = [[Person alloc] init];

[person setName:@“John Galt”];
[person setAge:32];
[person c...
«грязные делишки»

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

@implementation Person

- (void)dealloc {
  // ...

  [super dealloc]...
владение объектом
#import <Foundation/Foundation.h>

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

- (NSS...
владение объектом
#import "Person.h"

@implementation Person
- (NSString *)name {
  return name;
}
- (void)setName:(NSStri...
второй вариант
#import "Person.h"

@implementation Person
- (NSString *)name {
return name;
}
- (void)setName:(NSString *)...
освобождение памяти
#import "Person.h"

@implementation Person

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

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

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

- (NSString *)fullName {
   NSString *result;
   result = [[NSString alloc] initWithFormat:@“%@ %@”, firstNam...
Autorelease Pools (in pictures)

                 механизм autorelease




                 pp                   zed      ...
комильфо


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

[name ret...
cвойства

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

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

@prop...
synthesize
@implementation Person

@synthesize age;
@synthesize name;

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

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

•   @property (readonly) BOOL canLegallyVote

•   @property (assign) NSString *na...
осторожно с dot
в header:
@property int age;

в implementation:
@implementation Person
- (void)setAge:(int)newAge {
  self...
протоколы
@protocol Locking
- (void)lock;
- (void)unlock;
@end

@interface SomeClass : SomeSuperClass <Locking>
//...
@end...
основы Objective-C


done!
домашнее задание
«Управление студентом»

Стоит 10 баллов.

Отчет.
что дальше?
• Анатомия приложения
• Основной framework
• Делегация
• Свойства приложения
• MVC
• Cобытия
анатомия приложения

• Компилированный код
• Nib файл ( UI элементы + связи)
• Ресурсы (изображения, звуки)
• Info.plist ф...
UIKit Framework
• базовый framework
• стандартные элементы
• запускает приложение и контролирует
  lifecycle
• доступ к об...
делегаты

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

• используется в UIApplication ■
  UITa...
UIApplicationDelegate
           • Xcode создает самостоятельно
           • участие в жизни приложения
           • реали...
Info.plist file
• Описание настроек приложения
 -   Icon appearance
 -   Status bar style (default, black, hidden)
 -   Ori...
посмотрим?
http://empatika.com
oleg.parinov@empatika.com
Upcoming SlideShare
Loading in …5
×

Третье занятие курса iPhone разработки в ГУ-ВШЭ

1,745 views
1,689 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,745
On SlideShare
0
From Embeds
0
Number of Embeds
231
Actions
Shares
0
Downloads
19
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Третье занятие курса iPhone разработки в ГУ-ВШЭ

  1. 1. Разработка приложений для iPhone и iPad занятие #3
  2. 2. а что было?
  3. 3. • Класс объекта • NSLog() • NSString, NSMutableString • NSArray, NSMutableArray • NSDictionary, NSMutableDictionary • Свой класс
  4. 4. вызов суперкласса • [super doSomething]; - (void)doSomething { // Вызов реализации у супер-класса [super doSomething]; // Теперь собственное поведение int foo = bar; // ... }
  5. 5. жизненный цикл объекта • Создание объектов • Управление памятью • Уничтожение объектов
  6. 6. создание Allocate + Initialize Person *person; person = [[Person alloc] init];
  7. 7. создание собственного init #import "Person.h" @implementation Person - (id)init { // сначала инициализируется супер-класс if (self = [super init]) { age = 0; name = @“Bob”; // другая инициализация... } return self; } @end
  8. 8. множественные init - (id)init; - (id)initWithName:(NSString *)name; - (id)initWithName:(NSString *)name age:(int)age;
  9. 9. управление объектом • Выделение памяти - alloc • Освобождение памяти - dealloc • dealloc никогда не вызывается самостоятельно! (почти)
  10. 10. подсчет использования • Живой пока count >0 • alloc и copy создают объект с count=1 • retain увеличивает count на 1 • release уменьшает count на 1 • когда count=0 => dealloc
  11. 11. пример Person *person = nil; person = [[Person alloc] init]; [person setName:@“John Galt”]; [person setAge:32]; [person castBallot]; [person doSomethingElse]; [person release];
  12. 12. «грязные делишки» Person *person = [[Person alloc] init]; // ... [person release]; [person doSomething];
  13. 13. собственный dealloc метод #import "Person.h" @implementation Person - (void)dealloc { // ... [super dealloc]; //Только здесь! } @end
  14. 14. владение объектом #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
  15. 15. владение объектом #import "Person.h" @implementation Person - (NSString *)name { return name; } - (void)setName:(NSString *)newName { if (name != newName) { [name release]; зачем проверка? name = [newName retain]; } @end
  16. 16. второй вариант #import "Person.h" @implementation Person - (NSString *)name { return name; } - (void)setName:(NSString *)newName { if (name != newName) { [name release]; name = [newName copy]; } @end
  17. 17. освобождение памяти #import "Person.h" @implementation Person - (void)dealloc { [name release]; [super dealloc]; } @end
  18. 18. autorelease - (NSString *)fullName { NSString *result; result = [[NSString alloc] initWithFormat:@“%@ %@”, firstName, lastName]; return result; } утечка памяти! создали, но не уследили
  19. 19. autorelease - (NSString *)fullName { NSString *result; result = [[NSString alloc] initWithFormat:@“%@ %@”, firstName, lastName]; [result release]; return result; } слишком рано!
  20. 20. autorelease - (NSString *)fullName { NSString *result; result = [[NSString alloc] initWithFormat:@“%@ %@”, firstName, lastName]; [result autorelease]; return result; } ok!
  21. 21. 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
  22. 22. комильфо • alloc, new или copy возвращают не autorelease объект • остальные - autorelease
  23. 23. нет autorelease! • когда нужно хранить объект долго • вызываем [object retain] name = [NSMutableString string]; [name retain]; //... [name release];
  24. 24. cвойства • Доступ к полям объекта • Простота getter/setter • Определение политики использования • Но! можно переопределить get и set
  25. 25. декларация свойств #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
  26. 26. synthesize @implementation Person @synthesize age; @synthesize name; - (BOOL)canLegallyVote { return (age > 17); } @end
  27. 27. атрибуты свойств • @property int age; • @property (readonly) BOOL canLegallyVote • @property (assign) NSString *name; • @property (retain) NSString *name; • @property (copy) NSString *name; • можно самим создать get и set
  28. 28. осторожно с dot в header: @property int age; в implementation: @implementation Person - (void)setAge:(int)newAge { self.age = newAge; @end Что произойдет?
  29. 29. протоколы @protocol Locking - (void)lock; - (void)unlock; @end @interface SomeClass : SomeSuperClass <Locking> //... @end - setMyValue:(id) foo; сравни - setMyValue:(id <aProtocol>) foo;
  30. 30. основы Objective-C done!
  31. 31. домашнее задание «Управление студентом» Стоит 10 баллов. Отчет.
  32. 32. что дальше? • Анатомия приложения • Основной framework • Делегация • Свойства приложения • MVC • Cобытия
  33. 33. анатомия приложения • Компилированный код • Nib файл ( UI элементы + связи) • Ресурсы (изображения, звуки) • Info.plist файл - конфигурация приложения
  34. 34. UIKit Framework • базовый framework • стандартные элементы • запускает приложение и контролирует lifecycle • доступ к объекту UIApplication: [UIApplication sharedApplication]; • Управление статус-баром, иконкой приложения
  35. 35. делегаты • вместо наследования предоставляем делегат с реализованными методами • используется в UIApplication ■ UITableView ■ UITextField
  36. 36. UIApplicationDelegate • Xcode создает самостоятельно • участие в жизни приложения • реализует методы, которые вызывает UIApplication - (void)applicationDidFinishLaunching:(UIApplication *)application; - (void)applicationWillTerminate:(UIApplication *)application; - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url; - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;
  37. 37. Info.plist file • Описание настроек приложения - Icon appearance - Status bar style (default, black, hidden) - Orientation - Uses Wifi networking - System Requirements
  38. 38. посмотрим?
  39. 39. http://empatika.com oleg.parinov@empatika.com

×