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

Squeek 1

Embed Size (px)

DESCRIPTION

Первое занятия курса Squeek School по iOS (iPhone/ iPad) разработке.

Citation preview

Page 1: Squeek 1

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

squeek school

Page 2: Squeek 1

http://school.squeek.ru

Page 3: Squeek 1

Паринов Олег

Empatika, Project Manager

Высшая Школа Экономики, бизнес-информатика

[email protected]

oparinov

Page 4: Squeek 1

Курс

CS 193P Факультет бизнес-информатики

Отделение программной инженерии

ЗАО ПРОГНОЗ

Page 5: Squeek 1

Литература

• Документация• developer.apple.com

• stackoverflow.com

• Джонатан Здзиарски «iPhone SDK. Разработка приложений» http://www.ozon.ru/context/detail/id/4760826/

• http://school.squeek.ru

Getting Help• The assignment walks you

through it• Key spots to look

■ API & Conceptual Docs in Xcode■ Class header files■ Docs, sample code, tech notes

on Apple Developer Connection (ADC) site■ http://developer.apple.com■ Dev site uses Google search

5Thursday, January 7, 2010

Page 6: Squeek 1

Что в результате?

Objective-C

Xcode 4

iOS SDK

Foundation UIKit

командный проект

Page 7: Squeek 1

что потребуется от вас?

Mac OS X+

iOS SDK+

Xcode

Page 8: Squeek 1

«Герой нашего времени»

Page 9: Squeek 1

iPhone

Page 10: Squeek 1

iPod touch

Page 11: Squeek 1

iPad

Page 12: Squeek 1

основы Objective-C

Page 13: Squeek 1

Objective-C

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

NSDictionary)

Page 14: Squeek 1

ООП • Класс• Объект• Метод• Поле• Инкапсуляция• Наследование• Полиморфизм

Page 15: Squeek 1

Классы в Obj-C

• Классы тоже объекты

• Класс - шаблон для объекта• Класс имеет поля и методы (и свойства)

• Поля скрыты извне - нужны get/set

Page 16: Squeek 1

Наследование в Obj-CInheritance

• Hierarchical relation between classes• Subclass “inherit” behavior and data from superclass• Subclasses can use, augment or replace superclass methods

Superclass

Subclass

NSObject

UIControl

UIButton UITextField

10Thursday, January 7, 2010

Page 17: Squeek 1

Методы класса и объекта

• Методы объекта (динамические)

• Методы класса (статические)

Class and Instance Methods• Instances respond to instance methods

- (id)init;- (float)height;- (void)walk;

• Classes respond to class methods+ (id)alloc;+ (id)person;+ (Person *)sharedPerson;

21Thursday, January 7, 2010

Class and Instance Methods• Instances respond to instance methods

- (id)init;- (float)height;- (void)walk;

• Classes respond to class methods+ (id)alloc;+ (id)person;+ (Person *)sharedPerson;

21Thursday, January 7, 2010

Page 18: Squeek 1

Отправка сообщенияMessage syntax

[receiver message]

[receiver message:argument]

[receiver message:arg1 andArg:arg2]

22Thursday, January 7, 2010

• Message expression [receiver method: argument]

• Message

[receiver method: argument]

• Selector

[receiver method: argument]

• Method

The code selected by a message

Terminology

25Thursday, January 7, 2010

- cелектор

• Message expression [receiver method: argument]

• Message

[receiver method: argument]

• Selector

[receiver method: argument]

• Method

The code selected by a message

Terminology

25Thursday, January 7, 2010

- сообщение

Page 19: Squeek 1

ПримерPerson *voter;

int theAge = [voter age];

[voter setAge:21];

if ([voter canLegallyVote]) { // что-то сделать здесь}

[voter registerForState:@"CA" party:@"Independant"];

NSString *name = [[voter spouse] name];

Page 20: Squeek 1

стадия дизайна класса

• Создание описания класса - Person

• Определение супер-класса - NSObject

• Какие свойства нужны? имя, возраст, может ли голосовать

• Какие действия может выполнять? голосовать

Page 21: Squeek 1

Defining a classA public header and a private implementation

Header File Implementation File

9Tuesday, January 12, 2010

Класс = +

Page 22: Squeek 1

заголовок#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

Defining a classA public header and a private implementation

Header File Implementation File

11Tuesday, January 12, 2010

Page 23: Squeek 1

реализацияDefining a classA public header and a private implementation

Header File Implementation File

9Tuesday, January 12, 2010

#import "Person.h"

@implementation Person

- (int)age { return age;} - (void)setAge:(int)value {age = value;}//... и остальные методы

@end

Page 24: Squeek 1

вызов собственных методов

#import "Person.h"

@implementation Person

- (BOOL)canLegallyVote { return ([self age] >= 18);} - (void)castBallot {if ([self canLegallyVote]) {

// голосование}

else { NSLog (@“I’m not allowed to vote!”);} @end

Page 25: Squeek 1

Динамическая и статическая типизация

• Person *person

• id person

Page 26: Squeek 1

ничего

• nil

• person = nil; [person castBallot];

Page 27: Squeek 1

булевая

• BOOL flag = NO;

• if (flag == YES)

• YES == TRUE == 1

• NO == FALSE == 0

Page 28: Squeek 1

селектор

id obj;SEL sel = @selector(start:);if ([obj respondsToSelector:sel]) {

[obj performSelector:sel withObject:self];}

Page 29: Squeek 1

класс объекта

• [myObject class];

• [myObject className];

• [myObject isKindOfClass:[NSString class]];

Page 30: Squeek 1

логирование

• NSLog(@’’Hi there!’’);

• NSLog(@’‘The row number %d’’, rowNumber);

Page 31: Squeek 1

NSString

• Unicode

• @’‘Some string’’

• [NSString stringWithFormat:@’‘It’s %d’’, number];

• [string stringByAppendingString:anotherString];

• [string stringByAppendingFormat:

• [string intValue]; [string doubleValue];

Page 33: Squeek 1

NSArray

• массив объектов• count

• objectAtIndex:

• +arrayWithObjects: , , ,nil

• indexOfObject:

Page 34: Squeek 1

NSMutableArray

• addObject:

• removeObject:

• insertObject:AtIndex:

Page 37: Squeek 1

вызов суперкласса• [super doSomething];

- (void)doSomething { // Вызов реализации у супер-класса

[super doSomething];// Теперь собственное поведение int foo = bar; // ...}

Page 38: Squeek 1

жизненный цикл объекта

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

Page 39: Squeek 1

создание

Allocate + Initialize

Person *person; person = [[Person alloc] init];

Page 40: Squeek 1

создание собственного init#import "Person.h"

@implementation Person

- (id)init { // сначала инициализируется супер-классif (self = [super init])

{ age = 0;name = @“Bob”; // другая инициализация...}

return self;}

@end