SlideShare a Scribd company logo
1 of 23
Download to read offline
CocoaHeads Rennes
 8 septembre 2011




Bien débuter sur

               Jérémy Brault
Objective-C : descriptif

• Surcouche C
• Orienté objet
• Inspiré de SmallTalk
• Typage dynamique, héritage simple
Objective-C : classe
@interface Employee : Person {
     float salary_;
     float bonus_;
     Boss *boss_;
}


- (float)monthlyPay;
+ (uint)numberOfEmployees;


@end
Objective-C : classe
@implementation Employee


- (float)monthlyPay {
       return (salary_ + bonus_) / 12;
}


+ (uint)numberOfEmployees {
       return nbInstances;
}


@end
Objective-C : protocole
 @protocol SubscriptionListener <Listener>
 @required
 - (void)didSubscribe;


 @optional
 - (void)didUnsubscribe;


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


 @end


 @implementation Employee


 - (void)didSubscribe {
        ...
 }


 @end
rq1-> comparaison Java



        Objective-C : message
                                                                            (importance des
                                                                            étiquettes)




+ (Color*)redColor;
Color* myColor = [Color redColor];

- (Color*)colorByAddingBlue:(float)blueValue;
myColor = [myColor colorByAddingBlue:0.2];


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

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

[[Color redColor] colorByAddingBlue:0.2];
Objective-C : instance


• Appel sur la classe courante : self
• Appel sur la super-classe : super
Objective-C : création
        d’objet

• Allocation mémoire : alloc
• Initialisation : init
           Person *john = [[Person alloc] init];
Objective-C :
                   initialiseur
- (id)initWithIndex:(int)index {
    self = [super init];
    if (self) {
        index_ = index;
    }
    return self;
}
Objective-C :
          gestion mémoire
• Compteur de références : retainCount
 • alloc, copy, retain : +1
 • release, autorelease : -1
                                      employee
                                         2


 • 0 : dealloc
                              boss1              boss2
Objective-C :
     gestion mémoire

“ You are responsible for the objects you own ”



alloc/copy/retain          release/autorelease
Gestion mémoire :
     variable locale
- (void)doSomeWork {
     Job *boringJob = [[Job alloc] init];
     ...
     [boringJob release];
}


- (void)drinkHotBeverage {
     Cofee *cofee = [[[Cofee alloc] init] autorelease];
     ...
}
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];
}
Objective-C : getter &
        setter
@interface Employee : Person {
     float salary_;
     Boss *boss_;
}


@property (assign) float salary;
@property (retain) Boss *boss;


@end
Objective-C : getter &
        setter
@implementation Employee


@synthesize salary = salary_;
@synthesize boss = boss_;


@end
Développer sur iOS :
        API
• CocoaTouch
 • Descendant de Cocoa
 • Design MVC
 • Foundation Kit
 • UIKit
 • CoreData
Développer sur iOS :
        outils
• XCode
 • InterfaceBuilder
• GCC/GCD, LLVM/LLDB
• Instruments
CocoaTouch par
    l’exemple (1) : vue
• UIView
 • Dessin
 • Hiérarchie
 • Interaction
 • Customisation
• Sous-classes : UILabel, UIButton, etc.
DEMO
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.
DEMO
Must know-Must read
• Documentation & Forum Apple
• Forum PommeDev
• StackOverflow
• CocoaHeads
• “ Beginning iPhone Development :
  exploring the iPhone SDK ”, APress


                        jeremy.brault@niji.fr

More Related Content

Viewers also liked

創投公司 hoku_20121017
創投公司 hoku_20121017創投公司 hoku_20121017
創投公司 hoku_20121017Michael Pan
 
Evrdi : Social Diary ( iOS and Android )
Evrdi : Social Diary ( iOS and Android )Evrdi : Social Diary ( iOS and Android )
Evrdi : Social Diary ( iOS and Android )Eakapong Kattiya
 
iOS Advance Development - Social Media
iOS Advance Development - Social MediaiOS Advance Development - Social Media
iOS Advance Development - Social MediaEakapong Kattiya
 
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadИнтуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadГлеб Тарасов
 

Viewers also liked (6)

創投公司 hoku_20121017
創投公司 hoku_20121017創投公司 hoku_20121017
創投公司 hoku_20121017
 
Evrdi : Social Diary ( iOS and Android )
Evrdi : Social Diary ( iOS and Android )Evrdi : Social Diary ( iOS and Android )
Evrdi : Social Diary ( iOS and Android )
 
iOS Advance Development - Social Media
iOS Advance Development - Social MediaiOS Advance Development - Social Media
iOS Advance Development - Social Media
 
Day 1
Day 1Day 1
Day 1
 
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadИнтуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
 
I os 14
I os 14I os 14
I os 14
 

Similar to CocoaHeads Rennes #3 : Bien débuter sur iOS

Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Fred Brunel
 
Code flow - Cocoaheads paris
Code flow - Cocoaheads parisCode flow - Cocoaheads paris
Code flow - Cocoaheads parisCocoaHeads France
 
Introduction à MacRuby - OSDC.fr 2009
Introduction à MacRuby - OSDC.fr 2009Introduction à MacRuby - OSDC.fr 2009
Introduction à MacRuby - OSDC.fr 2009guest60b8020b
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptxSafaeLhr1
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11Microsoft
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Parischristophep21
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Microsoft
 
CodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxCodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxThomasParaiso1
 
CocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeadsRNS
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasPierre-Alban DEWITTE
 
Tout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasTout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasBruno Bonnin
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Geeks Anonymes
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++coursuniv
 
Projet base de donnée
Projet base de donnée Projet base de donnée
Projet base de donnée MakremArfaoui2
 

Similar to CocoaHeads Rennes #3 : Bien débuter sur iOS (20)

Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)
 
Code flow - Cocoaheads paris
Code flow - Cocoaheads parisCode flow - Cocoaheads paris
Code flow - Cocoaheads paris
 
Introduction à MacRuby
Introduction à MacRubyIntroduction à MacRuby
Introduction à MacRuby
 
Introduction à MacRuby - OSDC.fr 2009
Introduction à MacRuby - OSDC.fr 2009Introduction à MacRuby - OSDC.fr 2009
Introduction à MacRuby - OSDC.fr 2009
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptx
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Paris
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
 
CodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxCodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptx
 
CocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central Dispatch
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pas
 
Tout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasTout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pas
 
22410 b 04
22410 b 0422410 b 04
22410 b 04
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
De Java à .NET
De Java à .NETDe Java à .NET
De Java à .NET
 
Apple : iOS
Apple : iOSApple : iOS
Apple : iOS
 
Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes
 
POO-chapitre3.pptx
POO-chapitre3.pptxPOO-chapitre3.pptx
POO-chapitre3.pptx
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
 
Projet base de donnée
Projet base de donnée Projet base de donnée
Projet base de donnée
 

More from CocoaHeadsRNS

CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeadsRNS
 
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 CocoaHeads Rennes #14: iOS7 Controllers Transitions CocoaHeads Rennes #14: iOS7 Controllers Transitions
CocoaHeads Rennes #14: iOS7 Controllers TransitionsCocoaHeadsRNS
 
CocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeadsRNS
 
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeadsRNS
 
CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeadsRNS
 
CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeadsRNS
 
CocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : NotificationsCocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : NotificationsCocoaHeadsRNS
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeadsRNS
 
CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeadsRNS
 
CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeadsRNS
 
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeadsRNS
 
CocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOSCocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOSCocoaHeadsRNS
 
Cocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaHeadsRNS
 
CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4CocoaHeadsRNS
 
CocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeadsRNS
 
CocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeadsRNS
 

More from CocoaHeadsRNS (16)

CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubs
 
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 CocoaHeads Rennes #14: iOS7 Controllers Transitions CocoaHeads Rennes #14: iOS7 Controllers Transitions
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 
CocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par Celedev
 
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical Record
 
CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPods
 
CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock Objects
 
CocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : NotificationsCocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : Notifications
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nuls
 
CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeads Rennes #6
CocoaHeads Rennes #6
 
CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & Android
 
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOS
 
CocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOSCocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOS
 
Cocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOS
 
CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4
 
CocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératif
 
CocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisation
 

CocoaHeads Rennes #3 : Bien débuter sur iOS

  • 1. CocoaHeads Rennes 8 septembre 2011 Bien débuter sur Jérémy Brault
  • 2. Objective-C : descriptif • Surcouche C • Orienté objet • Inspiré de SmallTalk • Typage dynamique, héritage simple
  • 3. Objective-C : classe @interface Employee : Person { float salary_; float bonus_; Boss *boss_; } - (float)monthlyPay; + (uint)numberOfEmployees; @end
  • 4. Objective-C : classe @implementation Employee - (float)monthlyPay { return (salary_ + bonus_) / 12; } + (uint)numberOfEmployees { return nbInstances; } @end
  • 5. Objective-C : protocole @protocol SubscriptionListener <Listener> @required - (void)didSubscribe; @optional - (void)didUnsubscribe; @end
  • 6. Objective-C : protocole @interface Employee : Person <SubscriptionListener> { } @end @implementation Employee - (void)didSubscribe { ... } @end
  • 7. rq1-> comparaison Java Objective-C : message (importance des étiquettes) + (Color*)redColor; Color* myColor = [Color redColor]; - (Color*)colorByAddingBlue:(float)blueValue; myColor = [myColor colorByAddingBlue:0.2]; Color* color = Color.createColor(0.2, 0.4, 0.7, 0.6); + (Color*)createColorRed:(float)red green:(float)green blue:(float)blue alpha:(float)alpha; Color* color = [Color createColorRed:0.2 green:0.4 blue:0.7 alpha:0.6]; [[Color redColor] colorByAddingBlue:0.2];
  • 8. Objective-C : instance • Appel sur la classe courante : self • Appel sur la super-classe : super
  • 9. Objective-C : création d’objet • Allocation mémoire : alloc • Initialisation : init Person *john = [[Person alloc] init];
  • 10. Objective-C : initialiseur - (id)initWithIndex:(int)index { self = [super init]; if (self) { index_ = index; } return self; }
  • 11. Objective-C : gestion mémoire • Compteur de références : retainCount • alloc, copy, retain : +1 • release, autorelease : -1 employee 2 • 0 : dealloc boss1 boss2
  • 12. Objective-C : gestion mémoire “ You are responsible for the objects you own ” alloc/copy/retain release/autorelease
  • 13. Gestion mémoire : variable locale - (void)doSomeWork { Job *boringJob = [[Job alloc] init]; ... [boringJob release]; } - (void)drinkHotBeverage { Cofee *cofee = [[[Cofee alloc] init] autorelease]; ... }
  • 14. 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]; }
  • 15. Objective-C : getter & setter @interface Employee : Person { float salary_; Boss *boss_; } @property (assign) float salary; @property (retain) Boss *boss; @end
  • 16. Objective-C : getter & setter @implementation Employee @synthesize salary = salary_; @synthesize boss = boss_; @end
  • 17. Développer sur iOS : API • CocoaTouch • Descendant de Cocoa • Design MVC • Foundation Kit • UIKit • CoreData
  • 18. Développer sur iOS : outils • XCode • InterfaceBuilder • GCC/GCD, LLVM/LLDB • Instruments
  • 19. CocoaTouch par l’exemple (1) : vue • UIView • Dessin • Hiérarchie • Interaction • Customisation • Sous-classes : UILabel, UIButton, etc.
  • 20. DEMO
  • 21. 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.
  • 22. DEMO
  • 23. Must know-Must read • Documentation & Forum Apple • Forum PommeDev • StackOverflow • CocoaHeads • “ Beginning iPhone Development : exploring the iPhone SDK ”, APress jeremy.brault@niji.fr