Upload
oleg-parinov
View
2.587
Download
3
Embed Size (px)
DESCRIPTION
Первое занятия курса Squeek School по iOS (iPhone/ iPad) разработке.
Citation preview
Разработка приложений для iOS
squeek school
Паринов Олег
Empatika, Project Manager
Высшая Школа Экономики, бизнес-информатика
oparinov
Курс
CS 193P Факультет бизнес-информатики
Отделение программной инженерии
ЗАО ПРОГНОЗ
Литература
• Документация• 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
Что в результате?
Objective-C
Xcode 4
iOS SDK
Foundation UIKit
командный проект
что потребуется от вас?
Mac OS X+
iOS SDK+
Xcode
«Герой нашего времени»
iPhone
iPod touch
iPad
основы Objective-C
Objective-C
• ООП• Синтаксис• Сообщения• Управление памятью• Основные классы (NSString, NSArray,
NSDictionary)
ООП • Класс• Объект• Метод• Поле• Инкапсуляция• Наследование• Полиморфизм
Классы в Obj-C
• Классы тоже объекты
• Класс - шаблон для объекта• Класс имеет поля и методы (и свойства)
• Поля скрыты извне - нужны get/set
Наследование в 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
Методы класса и объекта
• Методы объекта (динамические)
• Методы класса (статические)
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
Отправка сообщения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
- сообщение
ПримерPerson *voter;
int theAge = [voter age];
[voter setAge:21];
if ([voter canLegallyVote]) { // что-то сделать здесь}
[voter registerForState:@"CA" party:@"Independant"];
NSString *name = [[voter spouse] name];
стадия дизайна класса
• Создание описания класса - Person
• Определение супер-класса - NSObject
• Какие свойства нужны? имя, возраст, может ли голосовать
• Какие действия может выполнять? голосовать
Defining a classA public header and a private implementation
Header File Implementation File
9Tuesday, January 12, 2010
Класс = +
заголовок#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
реализация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
вызов собственных методов
#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
Динамическая и статическая типизация
• Person *person
• id person
ничего
• nil
• person = nil; [person castBallot];
булевая
• BOOL flag = NO;
• if (flag == YES)
• YES == TRUE == 1
• NO == FALSE == 0
селектор
id obj;SEL sel = @selector(start:);if ([obj respondsToSelector:sel]) {
[obj performSelector:sel withObject:self];}
класс объекта
• [myObject class];
• [myObject className];
• [myObject isKindOfClass:[NSString class]];
логирование
• NSLog(@’’Hi there!’’);
• NSLog(@’‘The row number %d’’, rowNumber);
NSString
• Unicode
• @’‘Some string’’
• [NSString stringWithFormat:@’‘It’s %d’’, number];
• [string stringByAppendingString:anotherString];
• [string stringByAppendingFormat:
• [string intValue]; [string doubleValue];
NSMutableString
• редактируемая строка• appendString:
• appendFormat:
• insertString:atIndex:
NSArray
• массив объектов• count
• objectAtIndex:
• +arrayWithObjects: , , ,nil
• indexOfObject:
NSMutableArray
• addObject:
• removeObject:
• insertObject:AtIndex:
NSDictionary
• objectForKey
• count
• + dictionaryWithObject:forKey:
• + dictionaryWithObjects:forKeys:
• allKeys
• allValues
NSMutableDictionary
• setObject:forKey:
• removeObjectForKey:
вызов суперкласса• [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