squeek school 2

37
Разработка приложений для iOS занятие #2 squeek school

Upload: oleg-parinov

Post on 03-Jul-2015

2.011 views

Category:

Documents


2 download

DESCRIPTION

Презентация со второго занятия Squeek School

TRANSCRIPT

Page 1: Squeek school 2

Разработка приложений для iOSзанятие #2

squeek school

Page 2: Squeek school 2

http://school.squeek.ru

Page 3: Squeek school 2

Пронин Сергей

Empatika, Software Engineer

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

[email protected]

Page 4: Squeek school 2

основы Objective-C

Page 5: Squeek school 2

Objective-C

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

NSDictionary)

Page 6: Squeek school 2

Практика

• Класс - Stack (стэк)

• Добавить объект в стэк• init, initWithArray:

• Дать самый верхний (удаляется)• Количество элементов• Выдать объединенную строку

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

Page 7: Squeek school 2

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

- (id)init; - (id)initWithName:(NSString *)name; - (id)initWithName:(NSString *)name age:(int)age;

Page 8: Squeek school 2

управление объектом

• Выделение памяти - alloc

• Освобождение памяти - dealloc

• dealloc никогда не вызывается самостоятельно! (почти)

Page 9: Squeek school 2

подсчет использования

• Живой пока count >0

• alloc и copy создают объект с count=1

• retain увеличивает count на 1

• release уменьшает count на 1

• когда count=0 => dealloc

• retainCount

Page 10: Squeek school 2

примерPerson *person = nil; person = [[Person alloc] init];

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

[person release];

Page 11: Squeek school 2

что будет?

Person *person = [[Person alloc] init]; // ... [person release]; [person doSomething];

Page 12: Squeek school 2

собственный dealloc метод

#import "Person.h"

@implementation Person

- (void)dealloc { // ...

[super dealloc]; //Только здесь!} @end

Page 13: Squeek school 2

владение объектом#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

Page 14: Squeek school 2

владение объектом

#import "Person.h"

@implementation Person- (NSString *)name {

return name;}- (void)setName:(NSString *)newName {if (name != newName) {

[name release];name = [newName retain];

} @end

зачем проверка?

Page 15: Squeek school 2

второй вариант

#import "Person.h"

@implementation Person- (NSString *)name { return name;}- (void)setName:(NSString *)newName {if (name != newName) {[name release];name = [newName copy]; } @end

Page 16: Squeek school 2

освобождение памяти

#import "Person.h"

@implementation Person

- (void)dealloc {[name release];[super dealloc];

} @end

Page 17: Squeek school 2

autorelease

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

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

Page 18: Squeek school 2

autorelease

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

[result release];

return result;}

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

Page 19: Squeek school 2

autorelease

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

[result autorelease];

return result;}

ok!

Page 20: Squeek school 2

механизм autoreleaseAutorelease Pools (in pictures)

Launch app

Load main nib

Wait for event

Handle eventExit a

pp

App initialize

d

38Tuesday, January 12, 2010

Page 21: Squeek school 2

комильфо

• alloc, new или copy возвращают не autorelease объект

• остальные - autorelease

Page 22: Squeek school 2

нет autorelease!• когда нужно хранить объект долго• вызываем [object retain]{

name = [NSMutableString string];...[name retain];

}

//...{

[name release];}

Page 23: Squeek school 2

cвойства

• Доступ к полям объекта

• Простота getter/setter

• Определение политики использования• Но! можно переопределить get и set

Page 24: Squeek school 2

декларация свойств#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

Page 25: Squeek school 2

synthesize

@implementation Person

@synthesize age; @synthesize name;

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

}

@end

Page 26: Squeek school 2

атрибуты свойств

• @property int age;

• @property (readonly) BOOL canLegallyVote

• @property (assign) NSString *name;

• @property (retain) NSString *name;

• @property (copy) NSString *name;

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

Page 27: Squeek school 2

.dot синтаксис

• object.property = 2;

• int number = object.property;

Page 28: Squeek school 2

осторожно с dot

в header:@property int age;

в implementation:@implementation Person - (void)setAge:(int)newAge {

self.age = newAge; @end

Что произойдет?

Page 29: Squeek school 2

протоколы@protocol Locking- (void)lock;- (void)unlock;@optional - (void)open;@end

@interface SomeClass : SomeSuperClass <Locking>//...@end

- setMyValue:(id <aProtocol>) foo;

- setMyValue:(id) foo;сравни

Page 30: Squeek school 2

основы Objective-C

done!

Page 31: Squeek school 2

Основы разработки• MVC

• Views, ViewControllers

• Жизненный цикл• Xcode 4, Xcode 3 + Interface Builder

• UIKit framework

Page 32: Squeek school 2

анатомия приложения

• Компилированный код• Nib файл ( UI элементы + связи)

• Ресурсы (изображения, звуки)

• Info.plist файл - конфигурация приложения

Page 33: Squeek school 2

UIKit Framework

• базовый framework

• стандартные элементы• запускает приложение и контролирует жизненный цикл приложения

• доступ к объекту UIApplication: [UIApplication sharedApplication];

• Управление статус-баром, иконкой приложения

Page 34: Squeek school 2

делегаты

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

• используется в UIApplication ■ UITableView ■ UITextField

Page 35: Squeek school 2

UIApplicationDelegate

• Xcode создает самостоятельно

• участие в жизни приложения• реализует методы, которые вызывает

UIApplication

- (void)applicationDidFinishLaunching:(UIApplication *)application; - (void)applicationWillTerminate:(UIApplication *)application;- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;

Page 36: Squeek school 2

Info.plist file

• Описание настроек приложения- Icon appearance

- Status bar style (default, black, hidden)

- Orientation

- Uses Wifi networking

- System Requirements

Page 37: Squeek school 2

Xcode + Hello World!

Xcode