Squeek school 2
-
Upload
oleg-parinov -
Category
Documents
-
view
2.010 -
download
2
description
Transcript of Squeek school 2
![Page 1: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/1.jpg)
Разработка приложений для iOSзанятие #2
squeek school
![Page 3: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/3.jpg)
Пронин Сергей
Empatika, Software Engineer
Высшая Школа Экономики, программная инженерия
![Page 4: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/4.jpg)
основы Objective-C
![Page 5: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/5.jpg)
Objective-C
• ООП• Синтаксис• Сообщения• Управление памятью• Основные классы (NSString, NSArray,
NSDictionary)
![Page 6: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/6.jpg)
Практика
• Класс - Stack (стэк)
• Добавить объект в стэк• init, initWithArray:
• Дать самый верхний (удаляется)• Количество элементов• Выдать объединенную строку
• Есть ли элемент или нет•
![Page 7: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/7.jpg)
множественные init
- (id)init; - (id)initWithName:(NSString *)name; - (id)initWithName:(NSString *)name age:(int)age;
![Page 8: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/8.jpg)
управление объектом
• Выделение памяти - alloc
• Освобождение памяти - dealloc
• dealloc никогда не вызывается самостоятельно! (почти)
![Page 9: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/9.jpg)
подсчет использования
• Живой пока count >0
• alloc и copy создают объект с count=1
• retain увеличивает count на 1
• release уменьшает count на 1
• когда count=0 => dealloc
• retainCount
![Page 10: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/10.jpg)
пример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](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/11.jpg)
что будет?
Person *person = [[Person alloc] init]; // ... [person release]; [person doSomething];
![Page 12: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/12.jpg)
собственный dealloc метод
#import "Person.h"
@implementation Person
- (void)dealloc { // ...
[super dealloc]; //Только здесь!} @end
![Page 13: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/13.jpg)
владение объектом#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](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/14.jpg)
владение объектом
#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](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/15.jpg)
второй вариант
#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](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/16.jpg)
освобождение памяти
#import "Person.h"
@implementation Person
- (void)dealloc {[name release];[super dealloc];
} @end
![Page 17: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/17.jpg)
autorelease
- (NSString *)fullName { NSString *result;result = [[NSString alloc] initWithFormat:@“%@ %@”, firstName, lastName];return result;}
утечка памяти!создали, но не уследили
![Page 18: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/18.jpg)
autorelease
- (NSString *)fullName { NSString *result;result = [[NSString alloc] initWithFormat:@“%@ %@”, firstName, lastName];
[result release];
return result;}
слишком рано!
![Page 19: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/19.jpg)
autorelease
- (NSString *)fullName { NSString *result;result = [[NSString alloc] initWithFormat:@“%@ %@”, firstName, lastName];
[result autorelease];
return result;}
ok!
![Page 20: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/20.jpg)
механизм 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](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/21.jpg)
комильфо
• alloc, new или copy возвращают не autorelease объект
• остальные - autorelease
![Page 22: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/22.jpg)
нет autorelease!• когда нужно хранить объект долго• вызываем [object retain]{
name = [NSMutableString string];...[name retain];
}
//...{
[name release];}
![Page 23: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/23.jpg)
cвойства
• Доступ к полям объекта
• Простота getter/setter
• Определение политики использования• Но! можно переопределить get и set
![Page 24: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/24.jpg)
декларация свойств#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](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/25.jpg)
synthesize
@implementation Person
@synthesize age; @synthesize name;
- (BOOL)canLegallyVote { return (age > 17);
}
@end
![Page 26: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/26.jpg)
атрибуты свойств
• @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](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/27.jpg)
.dot синтаксис
• object.property = 2;
• int number = object.property;
![Page 28: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/28.jpg)
осторожно с dot
в header:@property int age;
в implementation:@implementation Person - (void)setAge:(int)newAge {
self.age = newAge; @end
Что произойдет?
![Page 29: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/29.jpg)
протоколы@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](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/30.jpg)
основы Objective-C
done!
![Page 31: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/31.jpg)
Основы разработки• MVC
• Views, ViewControllers
• Жизненный цикл• Xcode 4, Xcode 3 + Interface Builder
• UIKit framework
![Page 32: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/32.jpg)
анатомия приложения
• Компилированный код• Nib файл ( UI элементы + связи)
• Ресурсы (изображения, звуки)
• Info.plist файл - конфигурация приложения
![Page 33: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/33.jpg)
UIKit Framework
• базовый framework
• стандартные элементы• запускает приложение и контролирует жизненный цикл приложения
• доступ к объекту UIApplication: [UIApplication sharedApplication];
• Управление статус-баром, иконкой приложения
![Page 34: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/34.jpg)
делегаты
• вместо наследования предоставляем делегат с реализованными методами
• используется в UIApplication ■ UITableView ■ UITextField
![Page 35: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/35.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/36.jpg)
Info.plist file
• Описание настроек приложения- Icon appearance
- Status bar style (default, black, hidden)
- Orientation
- Uses Wifi networking
- System Requirements
![Page 37: Squeek school 2](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595828b1a28ab23548b468f/html5/thumbnails/37.jpg)
Xcode + Hello World!
Xcode