23
Bien débuter sur Jérémy Brault CocoaHeads Rennes 8 septembre 2011

CocoaHeads Rennes #3 : Bien débuter sur iOS

Embed Size (px)

DESCRIPTION

Slides de la présentation "Bien débuter sur iOS" de la session des CocoaHeads Rennais du 08 septembre 2011. Présentation assurée par Jérémy Brault, ingénieur chez Niji.

Citation preview

Page 1: CocoaHeads Rennes #3 : Bien débuter sur iOS

Bien débuter sur

Jérémy Brault

CocoaHeads Rennes8 septembre 2011

Page 2: CocoaHeads Rennes #3 : Bien débuter sur iOS

Objective-C : descriptif

• Surcouche C

• Orienté objet

• Inspiré de SmallTalk

• Typage dynamique, héritage simple

Page 3: CocoaHeads Rennes #3 : Bien débuter sur iOS

Objective-C : classe@interface Employee : Person {

float salary_;

float bonus_;

Boss *boss_;

}

- (float)monthlyPay;

+ (uint)numberOfEmployees;

@end

Page 4: CocoaHeads Rennes #3 : Bien débuter sur iOS

Objective-C : classe@implementation Employee

- (float)monthlyPay {

return (salary_ + bonus_) / 12;

}

+ (uint)numberOfEmployees {

return nbInstances;

}

@end

Page 5: CocoaHeads Rennes #3 : Bien débuter sur iOS

Objective-C : protocole@protocol SubscriptionListener <Listener>

@required

- (void)didSubscribe;

@optional

- (void)didUnsubscribe;

@end

Page 6: CocoaHeads Rennes #3 : Bien débuter sur iOS

Objective-C : protocole@interface Employee : Person <SubscriptionListener> {

}

@end

@implementation Employee

- (void)didSubscribe {

...

}

@end

Page 7: CocoaHeads Rennes #3 : Bien débuter sur iOS

Objective-C : messagerq1-> comparaison Java (importance des étiquettes)

Color* color = Color.createColor(0.2, 0.4, 0.7, 0.6);

Color* color = [Color createColorRed:0.2 green:0.4 blue:0.7 alpha:0.6];+ (Color*)createColorRed:(float)red green:(float)green blue:(float)blue alpha:(float)alpha;

[[Color redColor] colorByAddingBlue:0.2];

+ (Color*)redColor;

- (Color*)colorByAddingBlue:(float)blueValue;

Color* myColor = [Color redColor];

myColor = [myColor colorByAddingBlue:0.2];

Page 8: CocoaHeads Rennes #3 : Bien débuter sur iOS

Objective-C : instance

• Appel sur la classe courante : self

• Appel sur la super-classe : super

Page 9: CocoaHeads Rennes #3 : Bien débuter sur iOS

Objective-C : création d’objet

• Allocation mémoire : alloc

• Initialisation : init

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

Page 10: CocoaHeads Rennes #3 : Bien débuter sur iOS

Objective-C : initialiseur

- (id)initWithIndex:(int)index {

self = [super init];

if (self) {

index_ = index;

}

return self;

}

Page 11: CocoaHeads Rennes #3 : Bien débuter sur iOS

Objective-C :gestion mémoire

• Compteur de références : retainCount

employee

boss1 boss2

2

• 0 : dealloc

• release, autorelease : -1• alloc, copy, retain : +1

Page 12: CocoaHeads Rennes #3 : Bien débuter sur iOS

Objective-C :gestion mémoire

“ You are responsible for the objects you own ”

alloc/copy/retain release/autorelease

Page 13: CocoaHeads Rennes #3 : Bien débuter sur iOS

Gestion mémoire : variable locale

- (void)doSomeWork {

Job *boringJob = [[Job alloc] init];

...

[boringJob release];

}

- (void)drinkHotBeverage {

Cofee *cofee = [[[Cofee alloc] init] autorelease];

...

}

Page 14: CocoaHeads Rennes #3 : Bien débuter sur iOS

Gestion mémoire : variable d’instance

- (id)initWithBoss:(Boss*)boss {

self = [super init];

if (self) {

boss_ = [boss retain];

}

return self;

}

- (void)dealloc {

[boss_ release];

[super dealloc];

}

Page 15: CocoaHeads Rennes #3 : Bien débuter sur iOS

Objective-C : getter & setter

@interface Employee : Person {

float salary_;

Boss *boss_;

}

@property (assign) float salary;

@property (retain) Boss *boss;

@end

Page 16: CocoaHeads Rennes #3 : Bien débuter sur iOS

Objective-C : getter & setter

@implementation Employee

@synthesize salary = salary_;

@synthesize boss = boss_;

@end

Page 17: CocoaHeads Rennes #3 : Bien débuter sur iOS

Développer sur iOS : API

• CocoaTouch

• Descendant de Cocoa

• Design MVC

• Foundation Kit

• UIKit

• CoreData

Page 18: CocoaHeads Rennes #3 : Bien débuter sur iOS

Développer sur iOS : outils

• XCode

• InterfaceBuilder

• GCC/GCD, LLVM/LLDB

• Instruments

Page 19: CocoaHeads Rennes #3 : Bien débuter sur iOS

CocoaTouch par l’exemple (1) : vue

• UIView

• Dessin

• Hiérarchie

• Interaction

• Customisation

• Sous-classes : UILabel, UIButton, etc.

Page 20: CocoaHeads Rennes #3 : Bien débuter sur iOS

DEMO

Page 21: CocoaHeads Rennes #3 : Bien débuter sur iOS

CocoaTouch par l’exemple (2) : contrôleur• UIViewController

• Gestion d’une hiérarchie de vues

• Médiation entre données et vues

• Logique de navigation

• Sous-classes : UINavigationController, UITableViewController, etc.

Page 22: CocoaHeads Rennes #3 : Bien débuter sur iOS

DEMO

Page 23: CocoaHeads Rennes #3 : Bien débuter sur iOS

Must know-Must read• Documentation & Forum Apple

• Forum PommeDev

• StackOverflow

• CocoaHeads

• “ Beginning iPhone Development : exploring the iPhone SDK ”, APress

[email protected]