Третье занятие курса iPhone разработки в ГУ-ВШЭ
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 1,890 views

 

Statistics

Views

Total Views
1,890
Views on SlideShare
1,675
Embed Views
215

Actions

Likes
1
Downloads
17
Comments
0

1 Embed 215

http://www.empatika.com 215

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • Разработка приложений для iPhone и iPad занятие #3
  • а что было?
  • • Класс объекта • NSLog() • NSString, NSMutableString • NSArray, NSMutableArray • NSDictionary, NSMutableDictionary • Свой класс
  • вызов суперкласса • [super doSomething]; - (void)doSomething { // Вызов реализации у супер-класса [super doSomething]; // Теперь собственное поведение int foo = bar; // ... }
  • жизненный цикл объекта • Создание объектов • Управление памятью • Уничтожение объектов
  • создание Allocate + Initialize Person *person; person = [[Person alloc] init];
  • создание собственного init #import "Person.h" @implementation Person - (id)init { // сначала инициализируется супер-класс if (self = [super init]) { age = 0; name = @“Bob”; // другая инициализация... } return self; } @end
  • множественные 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
  • пример 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 в header: @property int age; в implementation: @implementation Person - (void)setAge:(int)newAge { self.age = newAge; @end Что произойдет?
  • протоколы @protocol Locking - (void)lock; - (void)unlock; @end @interface SomeClass : SomeSuperClass <Locking> //... @end - setMyValue:(id) foo; сравни - setMyValue:(id <aProtocol>) foo;
  • основы Objective-C done!
  • домашнее задание «Управление студентом» Стоит 10 баллов. Отчет.
  • что дальше? • Анатомия приложения • Основной framework • Делегация • Свойства приложения • MVC • Cобытия
  • анатомия приложения • Компилированный код • Nib файл ( UI элементы + связи) • Ресурсы (изображения, звуки) • Info.plist файл - конфигурация приложения
  • UIKit Framework • базовый framework • стандартные элементы • запускает приложение и контролирует lifecycle • доступ к объекту 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
  • посмотрим?
  • http://empatika.com oleg.parinov@empatika.com