SlideShare ist ein Scribd-Unternehmen logo
1 von 103
Downloaden Sie, um offline zu lesen
Programming  iOS with
Objective-C
Nikita Korchagin
Developer
Today
•Introduction
•Starting iOS programming
•iOS development
•Objective-C language - methods, properties, protocols...
•Model-View-Controller pattern
•Desktop vs. Mobile: what’s different
•Human Interface Guidelines
•Further steps: materials to read
How to start to develop for iOS?
Jedi way
•Intel-based Mac (Mac Mini, MacBook Air/Pro, iMac, Mac Pro)
•Installed Mac OS X 10.7 «Lion» or higher
•XCode 6 with latest iOS SDK
•Own i-Device (iPhone/iPod Touch/iPad)
•Apple Developer program account ($99 per 1 year)
•Good knowledge of design patterns
•Objective-C knowledge OR
•Relevant experience in C or any strong-typed object-oriented
language like Java/C#/C++
Alternative ways
•Alternative IDE - AppCode (Mac, still requires Xcode to
be installed)
•Objective-C++ (kernel - C++, UI - Objective-C)
•PhoneGap/Titanium (cross-platform)
•Xamarin (.NET/C# - compiles to native code)
•C++ Marmalade SDK for Visual Studio
•Unity3D/Cocos2D-x for game development
•HTML5/CSS3/JavaScript for web applications
Swift
•Swift is a multi-paradigm, compiled programming language created
by Apple Inc. for iOS and OS X development.
•It uses the Objective-C runtime, allowing C, Objective-C, C++ and
Swift code to run within a single program.
•Swift was introduced at Apple's 2014 WWDC and Swift 2 at WWDC
2015. Initially a proprietary language, it was announced that Swift 2
would become open source supporting iOS, OS X and Linux.
•Swift supports the core concepts that made Obj-C flexible, notably
dynamic dispatch, widespread late binding, extensible programming
and similar features.
•Swift has added the concept of protocol extensibility, an extensibility
system that can be applied to types, structs and classes, Apple
promotes this as a real change in programming paradigms they refer
to as protocol-oriented programming.
Objective-C
•Objective-C is a general-purpose, object-oriented programming
language that adds Smalltalk-style messaging to the C programming
language.
•It is the main programming language used by Apple until 2014.
•Originally developed in the early 1980s, it was selected as the main
language used by NeXT for its NeXTSTEP operating system.
•Objective-C is a thin layer on top of C, and moreover is a strict
superset of C.
•All of the syntax for non-object-oriented operations (including
primitive variables, pre-processing, expressions, function
declarations, and function calls) are identical to that of C.
•Syntax for object-oriented features is an implementation of
Smalltalk-style messaging.
Method Syntax
•Dash for instance method. Plus for class method.
- (NSArray *)shipsAtPoint:(CGPoint)bombLocation withDamage:(BOOL)damaged;
Instance methods
•“Normal” methods you are used to.
•Can access instance variables inside as if they were locals.
•Can send messages to self and super inside.
•Both dispatch the message to the calling object, but use different
implementations.
•If a superclass of yours calls a method on self, it will your
implementation (if one exists).
•Example calling syntax:
BOOL destroyed = [ship dropBomb:bombType at:dropPoint from:height];
Class methods
•Used for allocation, singletons, utilities.
+ (id)alloc; //makes space for an object of the receiver’s class (always pair w/init)
+ (id)motherShip; //returns the one and only, shared (singleton) mother ship instance
+ (int)turretsOnShipOfSize:(int)shipSize; // informational utility method
•Can not access instance variables inside.
•Messages to self and super mean something a little different. Both
invoke only other class methods. Inheritance does work.
CalculatorBrain *brain = [[CalculatorBrain alloc] init];
Ship *theMotherShip = [Ship motherShip];
Ship *newShip = [Ship shipWithTurrentCount:5];
int turretsOnMediumSizedShip = [Ship turretsOnShipOfSize:4];
Instance variables
•By default, instance variables are @protected (only the class and
subclasses can access).
•Can be marked @private (only the class can access) or @public
(anyone can access).
@interface MyObject : NSObject
{
int foo; //protected
@private
int eye; //private
@protected
int bar; //protected
@public
int forum; //public
int apology; //public
@private
int jet; //private
}
Properties
•Information from the previous slide doesn’t use in the modern
Objective-C!
•Use @property and “dot notation” to access instance variables.
@interface MyObject : NSObject
@property int eye;
@end
•If you use the readonly keyword, only the getter will be declared
@implementation MyObject
@synthesize eye = _eye; //generate getters/setters
- (int)eye {
return _eye;
}
- (void)setEye:(int)eye {
_eye = eye;
}
@end
Properties
•It’s common to use dot notation to access ivars inside your class
•It’s not the same as referencing the instance variable directly.
•The latter calls the getter method (which is usually what you want
for subclassability).
•There’s more to think about when a @property is an object. But it’s
all about memory management.
int x = _eye;
int y = self.eye;
Dynamic binding
•All objects are allocated in the heap, so you always use a pointer.
•Decision about code to run on message send happens at runtime.
Not at compile time. None of the decision is made at compile
time.
•Static typing (e.g. NSString * vs. self) is purely an aid to the
compiler to help you find bugs.
•If neither the class of the receiving object nor its superclasses
implements that method: crash!
•It is legal (and sometimes even good code) to “cast” a pointer. But
we usually do it only after we’ve used “introspection” to find out
more about the object.
Introspection
•So when do we use id? Isn’t it always bad? No, we might have a
collection (e.g. an array) of objects of different classes. But we’d
have to be sure we know which was which before we sent
messages to them. How do we do that? Introspection.
•All objects that inherit from NSObject know these methods
isKindOfClass: //returns whether an object is that kind of class (inheritance included)
isMemberOfClass: //returns whether an object is that kind of class (no inheritance)
respondsToSelector: //returns whether an object responds to a given method
•Arguments to these methods are a little tricky. Class testing
methods take a Class. You get a Class by sending the class
method class to a class :)
if ([obj isKindOfClass:[NSString class]]) {
NSString *s = [(NSString *)obj stringByAppendingString:@"xyzzy"];
}
Introspection
•Method testing methods take a selector (SEL).
•Special @selector() directive turns the name of a method into a
selector.
• SEL is the Objective-C “type” for a selector
•If you have a SEL, you can ask an object to perform it
if ([obj respondsToSelector:@selector(shoot)]) {
[obj shoot];
}
[obj performSelector:shootSelector];
[obj performSelector:moveToSelector withObject:coordinate];
nil
•The value of an object pointer that does not point to anything
•Like “zero” for a primitive type (int, double, etc.). Actually, it’s not
“like” zero: it is zero.
• NSObject sets all its instance variables to zero. Thus, instance
variables that are pointers to objects start out with the value of
nil.
•Sending messages to nil is (mostly) okay. No code gets executed.
Protocols
•Similar to @interface, but no implementation
@protocol Foo
- (void)doSomething; // implementors must implement this
@optional
- (int)getSomething; // implementors do not need to implement this
@required
- (NSArray *)getManySomethings:(int)howMany; // must implement
@end
•Classes then implement it. They must proclaim that they
implement it in their @interface
@interface MyClass : NSObject <Foo>
...
@end
•You must implement all non-@optional methods
•Just like static typing, this is all just compiler-helping-you stuff It
makes no difference at runtime.
Protocols
•Think of it as documentation for your method interfaces
•Number one use of protocols in iOS: delegates and dataSources
•The delegate or dataSource is always defined as an assign
@property

@property (assign) id <UIApplicationDelegate> delegate;
•Always assumed that the object serving as delegate will outlive the
object doing the delegating.
Memory Management
Reference Counting
•How does it work? Simple set of rules everyone must follow.
•You take ownership for an object you want to keep a pointer to.
Multiple owners for a given object is okay (common).
•When you’re done with an object, you give up that ownership.
There’s a way to take “temporary” ownership too.
•When no one claims ownership for an object, it gets deallocated
After that point, your program will crash if that object gets sent a
message!
Reference Counting
•How does it work? Simple set of rules everyone must follow.
•You take ownership for an object you want to keep a pointer to.
Multiple owners for a given object is okay (common).
•When you’re done with an object, you give up that ownership.
There’s a way to take “temporary” ownership too.
•When no one claims ownership for an object, it gets deallocated
After that point, your program will crash if that object gets sent a
message!
Manual Reference Counting
Automatic Reference Counting
Temporary ownership
•So how does this “temporary ownership” thing work?
•If you want to give someone an object with the “option” for them to
take ownership of it, you must take ownership of it yourself, then
send the object the message autorelease (or obtain a temporarily
owned object from somewhere else, modify it, then give it away).
•Your ownership will “expire” at some future time (but not before
the current event is finished). In the meantime, someone else can
send retain to the object if they want to own it themselves.
MVC
View Controllers
View Controller
•Class is UIViewController. It’s your Controller in an MVC grouping.
•VERY important property in UIViewController
@property (retain) UIView *view;
•This is a pointer to the top-level UIView in the Controller’s View (in
MVC terms)
•View Controllers have a “lifecycle” from creation to destruction.
Your subclass gets opportunities to participate in that lifecycle by
overriding methods
Controller of Controllers
•Special View Controllers that manage a collection of other MVCs
• UINavigationController manages a hierarchical flow of MVCs and
presents them like a “stack of cards”. Very, very, very commonly
used on the iPhone
• UITabBarController manages a group of independent MVCs
selected using tabs on the bottom of the screen
• UISplitViewController side-by-side, master->detail arrangement
of two MVCs. iPad only
•Custom containers (iOS 5 and later)
Desktop vs. Mobile
What’s different?
•Multitouch display & gestures
•Front and rear camera
•Speakers and microphone
•Location subsystem - GPS/GLONASS
•Magnetometer and compass
•G-sensor and accelerometer
•Bluetooth accessories
Network
•Variants of connection
•GPRS
•EDGE
•3G/4G
•WiFi
•All these opportunities (except WiFi) are connection-
lost-prone
•Cellular network connection is expensive
Screens
•Fullscreen applications
•Bigger UI elements for fingers
•Dark colors to reduce energy consumption
•Different resolutions (x1, x2 and x3)
•Assets for different resolutions
•Ergonomics
Resources
•Every heavy application dramatically drains battery’s life
•Geolocation - GPS
•Networking
•Disk capacity is limited (8/16/32/64/… GB and no SD/
microSD slot)
•Restricted multitasking (full introduced in iOS 7)
•Only a few types of content are supported
•UI is rendered using real-time thread and shouldn’t be
blocked ever
Security mechanisms
•Sandboxing - every application is isolated and runs under
restricted user’s account («jailed»)
•IPC is limited to URL schemas and extensions
•Personal data and passwords should be encrypted (Keychain) or
not stored on the device at all
•HTTPS connections are preferred; certificate validation is needed
•Data on disk can be encrypted and protected by iOS
•Group policies can be established for iOS devices using
configuration profiles
Creating and submitting the app
•Application should be tested thoroughly; crashes are forbidden
•Application should follow Apple’s Human Interface Guidelines
•Private API usage is forbidden
•Application can be deployed only to the device which is in the
provisioning list
•Application’s binary is signed using developer’s private key
•Application is thoroughly tested during review process
Human Interface Guidelines
HIG
HIG
HIG
HIG
Bad UI/UX
Bad UI/UX
Bad UI/UX
Bad UI/UX
Tablets specific UI
Accessibility
Good UI/UX
Interface Builder HIG support
flat UI vs. skeuomorphism
Further steps
Q&A
Thanks for your attention!

Weitere ähnliche Inhalte

Was ist angesagt?

Simply - OOP - Simply
Simply - OOP - SimplySimply - OOP - Simply
Simply - OOP - SimplyThomas Bahn
 
Learning iOS and hunting NSZombies in 3 weeks
Learning iOS and hunting NSZombies in 3 weeksLearning iOS and hunting NSZombies in 3 weeks
Learning iOS and hunting NSZombies in 3 weeksCalvin Cheng
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScriptRangana Sampath
 
iOS Beginners Lesson 2
iOS Beginners Lesson 2iOS Beginners Lesson 2
iOS Beginners Lesson 2Calvin Cheng
 
2CPP04 - Objects and Classes
2CPP04 - Objects and Classes2CPP04 - Objects and Classes
2CPP04 - Objects and ClassesMichael Heron
 
iOS 101 - Xcode, Objective-C, iOS APIs
iOS 101 - Xcode, Objective-C, iOS APIsiOS 101 - Xcode, Objective-C, iOS APIs
iOS 101 - Xcode, Objective-C, iOS APIsSubhransu Behera
 
Objective-C talk
Objective-C talkObjective-C talk
Objective-C talkbradringel
 
Rapid Application Development using Ruby on Rails
Rapid Application Development using Ruby on RailsRapid Application Development using Ruby on Rails
Rapid Application Development using Ruby on RailsSimobo
 
[UniteKorea2013] The Unity Rendering Pipeline
[UniteKorea2013] The Unity Rendering Pipeline[UniteKorea2013] The Unity Rendering Pipeline
[UniteKorea2013] The Unity Rendering PipelineWilliam Hugo Yang
 
Basic info on java intro
Basic info on java introBasic info on java intro
Basic info on java introkabirmahlotra
 
You need to extend your models? EMF Facet vs. EMF Profiles
You need to extend your models? EMF Facet vs. EMF ProfilesYou need to extend your models? EMF Facet vs. EMF Profiles
You need to extend your models? EMF Facet vs. EMF ProfilesPhilip Langer
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference CountingRobert Brown
 
JavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayJavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayChamnap Chhorn
 
Eero cocoaheadssf-talk
Eero cocoaheadssf-talkEero cocoaheadssf-talk
Eero cocoaheadssf-talkAndy Arvanitis
 
Extending the Xbase Typesystem
Extending the Xbase TypesystemExtending the Xbase Typesystem
Extending the Xbase TypesystemSebastian Zarnekow
 
Model Manipulation Using Embedded DSLs in Scala
Model Manipulation Using Embedded DSLs in ScalaModel Manipulation Using Embedded DSLs in Scala
Model Manipulation Using Embedded DSLs in ScalaFilip Krikava
 

Was ist angesagt? (20)

Simply - OOP - Simply
Simply - OOP - SimplySimply - OOP - Simply
Simply - OOP - Simply
 
Learning iOS and hunting NSZombies in 3 weeks
Learning iOS and hunting NSZombies in 3 weeksLearning iOS and hunting NSZombies in 3 weeks
Learning iOS and hunting NSZombies in 3 weeks
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
 
iOS Beginners Lesson 2
iOS Beginners Lesson 2iOS Beginners Lesson 2
iOS Beginners Lesson 2
 
2CPP04 - Objects and Classes
2CPP04 - Objects and Classes2CPP04 - Objects and Classes
2CPP04 - Objects and Classes
 
iOS 101 - Xcode, Objective-C, iOS APIs
iOS 101 - Xcode, Objective-C, iOS APIsiOS 101 - Xcode, Objective-C, iOS APIs
iOS 101 - Xcode, Objective-C, iOS APIs
 
Objective-C talk
Objective-C talkObjective-C talk
Objective-C talk
 
Rapid Application Development using Ruby on Rails
Rapid Application Development using Ruby on RailsRapid Application Development using Ruby on Rails
Rapid Application Development using Ruby on Rails
 
[UniteKorea2013] The Unity Rendering Pipeline
[UniteKorea2013] The Unity Rendering Pipeline[UniteKorea2013] The Unity Rendering Pipeline
[UniteKorea2013] The Unity Rendering Pipeline
 
Basic info on java intro
Basic info on java introBasic info on java intro
Basic info on java intro
 
Introduction to java
Introduction to javaIntroduction to java
Introduction to java
 
Intermediate JavaScript
Intermediate JavaScriptIntermediate JavaScript
Intermediate JavaScript
 
Metaprogramming ruby
Metaprogramming rubyMetaprogramming ruby
Metaprogramming ruby
 
You need to extend your models? EMF Facet vs. EMF Profiles
You need to extend your models? EMF Facet vs. EMF ProfilesYou need to extend your models? EMF Facet vs. EMF Profiles
You need to extend your models? EMF Facet vs. EMF Profiles
 
Advance JS and oop
Advance JS and oopAdvance JS and oop
Advance JS and oop
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference Counting
 
JavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayJavaScript in Object-Oriented Way
JavaScript in Object-Oriented Way
 
Eero cocoaheadssf-talk
Eero cocoaheadssf-talkEero cocoaheadssf-talk
Eero cocoaheadssf-talk
 
Extending the Xbase Typesystem
Extending the Xbase TypesystemExtending the Xbase Typesystem
Extending the Xbase Typesystem
 
Model Manipulation Using Embedded DSLs in Scala
Model Manipulation Using Embedded DSLs in ScalaModel Manipulation Using Embedded DSLs in Scala
Model Manipulation Using Embedded DSLs in Scala
 

Andere mochten auch

"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен..."Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...DataArt
 
Application form
Application formApplication form
Application formsksknba5015
 
«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...
«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...
«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...DataArt
 
Ointment Toothpaste Cream Manufacturing Plant
Ointment Toothpaste Cream Manufacturing PlantOintment Toothpaste Cream Manufacturing Plant
Ointment Toothpaste Cream Manufacturing PlantAkshar Engineering Works
 
손필상 Smtnt메시징제안서
손필상 Smtnt메시징제안서손필상 Smtnt메시징제안서
손필상 Smtnt메시징제안서PhilSang Son
 
Елизавета Скоморохова — Что такое Usability Expert Review и Usability testing.
Елизавета Скоморохова — Что такое Usability Expert Review и Usability testing.Елизавета Скоморохова — Что такое Usability Expert Review и Usability testing.
Елизавета Скоморохова — Что такое Usability Expert Review и Usability testing.DataArt
 
Building Pennsylvania's First Detector Network Part 2
Building Pennsylvania's First Detector Network Part 2Building Pennsylvania's First Detector Network Part 2
Building Pennsylvania's First Detector Network Part 2PlantHealthResourceCenter
 
180 blue dining room training
180 blue dining room training180 blue dining room training
180 blue dining room trainingBill Buffalo
 
Benefits for Millennials
Benefits for MillennialsBenefits for Millennials
Benefits for MillennialsUrbanBound
 
Teletrabajo en la administración pública
Teletrabajo en la administración públicaTeletrabajo en la administración pública
Teletrabajo en la administración públicaJoel Quintana
 
Роман Денисенко — Нагрузочное тестирование для самых маленьких.
Роман Денисенко — Нагрузочное тестирование для самых маленьких.Роман Денисенко — Нагрузочное тестирование для самых маленьких.
Роман Денисенко — Нагрузочное тестирование для самых маленьких.DataArt
 
Сергей Зиновьев и Игорь Ходырев - Ruby on Rails
Сергей Зиновьев и Игорь Ходырев - Ruby on RailsСергей Зиновьев и Игорь Ходырев - Ruby on Rails
Сергей Зиновьев и Игорь Ходырев - Ruby on RailsDataArt
 
Николай Хабаров — Эволюция IoT
Николай Хабаров — Эволюция IoTНиколай Хабаров — Эволюция IoT
Николай Хабаров — Эволюция IoTDataArt
 
Александр Богданов «Lambda - архитектура»
Александр Богданов «Lambda - архитектура»Александр Богданов «Lambda - архитектура»
Александр Богданов «Lambda - архитектура»DataArt
 

Andere mochten auch (20)

"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен..."Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
 
Movie distributors
Movie distributorsMovie distributors
Movie distributors
 
Application form
Application formApplication form
Application form
 
«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...
«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...
«QA Community: что делать с людьми, которые хотят работать побольше» Евгений ...
 
Ointment Toothpaste Cream Manufacturing Plant
Ointment Toothpaste Cream Manufacturing PlantOintment Toothpaste Cream Manufacturing Plant
Ointment Toothpaste Cream Manufacturing Plant
 
손필상 Smtnt메시징제안서
손필상 Smtnt메시징제안서손필상 Smtnt메시징제안서
손필상 Smtnt메시징제안서
 
Елизавета Скоморохова — Что такое Usability Expert Review и Usability testing.
Елизавета Скоморохова — Что такое Usability Expert Review и Usability testing.Елизавета Скоморохова — Что такое Usability Expert Review и Usability testing.
Елизавета Скоморохова — Что такое Usability Expert Review и Usability testing.
 
Building Pennsylvania's First Detector Network Part 2
Building Pennsylvania's First Detector Network Part 2Building Pennsylvania's First Detector Network Part 2
Building Pennsylvania's First Detector Network Part 2
 
180 blue dining room training
180 blue dining room training180 blue dining room training
180 blue dining room training
 
Benefits for Millennials
Benefits for MillennialsBenefits for Millennials
Benefits for Millennials
 
Pen pc tecn
Pen pc tecnPen pc tecn
Pen pc tecn
 
Teletrabajo en la administración pública
Teletrabajo en la administración públicaTeletrabajo en la administración pública
Teletrabajo en la administración pública
 
Роман Денисенко — Нагрузочное тестирование для самых маленьких.
Роман Денисенко — Нагрузочное тестирование для самых маленьких.Роман Денисенко — Нагрузочное тестирование для самых маленьких.
Роман Денисенко — Нагрузочное тестирование для самых маленьких.
 
Sam mendes
Sam mendesSam mendes
Sam mendes
 
Riley slides (2)
Riley slides (2)Riley slides (2)
Riley slides (2)
 
Сергей Зиновьев и Игорь Ходырев - Ruby on Rails
Сергей Зиновьев и Игорь Ходырев - Ruby on RailsСергей Зиновьев и Игорь Ходырев - Ruby on Rails
Сергей Зиновьев и Игорь Ходырев - Ruby on Rails
 
Николай Хабаров — Эволюция IoT
Николай Хабаров — Эволюция IoTНиколай Хабаров — Эволюция IoT
Николай Хабаров — Эволюция IoT
 
Liquid/Syrup/Oral Manufacturing Plant
Liquid/Syrup/Oral Manufacturing PlantLiquid/Syrup/Oral Manufacturing Plant
Liquid/Syrup/Oral Manufacturing Plant
 
Thriller's best villains
Thriller's best villainsThriller's best villains
Thriller's best villains
 
Александр Богданов «Lambda - архитектура»
Александр Богданов «Lambda - архитектура»Александр Богданов «Lambda - архитектура»
Александр Богданов «Lambda - архитектура»
 

Ähnlich wie Никита Корчагин - Programming Apple iOS with Objective-C

Bootstrapping iPhone Development
Bootstrapping iPhone DevelopmentBootstrapping iPhone Development
Bootstrapping iPhone DevelopmentThoughtWorks
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not JavaChris Adamson
 
Intro to iOS: Object Oriented Programming and Objective-C
Intro to iOS: Object Oriented Programming and Objective-CIntro to iOS: Object Oriented Programming and Objective-C
Intro to iOS: Object Oriented Programming and Objective-CAndrew Rohn
 
Objective-C for iOS Application Development
Objective-C for iOS Application DevelopmentObjective-C for iOS Application Development
Objective-C for iOS Application DevelopmentDhaval Kaneria
 
Cappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application FrameworkCappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application FrameworkAndreas Korth
 
Objective-c for Java Developers
Objective-c for Java DevelopersObjective-c for Java Developers
Objective-c for Java DevelopersMuhammad Abdullah
 
Method Swizzling with Objective-C
Method Swizzling with Objective-CMethod Swizzling with Objective-C
Method Swizzling with Objective-CAdamFallon4
 
Ios development
Ios developmentIos development
Ios developmentelnaqah
 
CPP13 - Object Orientation
CPP13 - Object OrientationCPP13 - Object Orientation
CPP13 - Object OrientationMichael Heron
 
TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!Alessandro Giorgetti
 
CBDW2014 - MockBox, get ready to mock your socks off!
CBDW2014 - MockBox, get ready to mock your socks off!CBDW2014 - MockBox, get ready to mock your socks off!
CBDW2014 - MockBox, get ready to mock your socks off!Ortus Solutions, Corp
 
introduction of Object oriented programming
introduction of Object oriented programmingintroduction of Object oriented programming
introduction of Object oriented programmingRiturajJain8
 
Irving iOS Jumpstart Meetup - Objective-C Session 2
Irving iOS Jumpstart Meetup - Objective-C Session 2Irving iOS Jumpstart Meetup - Objective-C Session 2
Irving iOS Jumpstart Meetup - Objective-C Session 2irving-ios-jumpstart
 
UML for Aspect Oriented Design
UML for Aspect Oriented DesignUML for Aspect Oriented Design
UML for Aspect Oriented DesignEdison Lascano
 

Ähnlich wie Никита Корчагин - Programming Apple iOS with Objective-C (20)

Bootstrapping iPhone Development
Bootstrapping iPhone DevelopmentBootstrapping iPhone Development
Bootstrapping iPhone Development
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not Java
 
Intro to iOS: Object Oriented Programming and Objective-C
Intro to iOS: Object Oriented Programming and Objective-CIntro to iOS: Object Oriented Programming and Objective-C
Intro to iOS: Object Oriented Programming and Objective-C
 
Objective-C for iOS Application Development
Objective-C for iOS Application DevelopmentObjective-C for iOS Application Development
Objective-C for iOS Application Development
 
Cappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application FrameworkCappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application Framework
 
Ahieving Performance C#
Ahieving Performance C#Ahieving Performance C#
Ahieving Performance C#
 
Iphone course 1
Iphone course 1Iphone course 1
Iphone course 1
 
Objective-c for Java Developers
Objective-c for Java DevelopersObjective-c for Java Developers
Objective-c for Java Developers
 
Method Swizzling with Objective-C
Method Swizzling with Objective-CMethod Swizzling with Objective-C
Method Swizzling with Objective-C
 
Objective c
Objective cObjective c
Objective c
 
Ios development
Ios developmentIos development
Ios development
 
ppt_on_java.pptx
ppt_on_java.pptxppt_on_java.pptx
ppt_on_java.pptx
 
CPP13 - Object Orientation
CPP13 - Object OrientationCPP13 - Object Orientation
CPP13 - Object Orientation
 
TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!
 
CBDW2014 - MockBox, get ready to mock your socks off!
CBDW2014 - MockBox, get ready to mock your socks off!CBDW2014 - MockBox, get ready to mock your socks off!
CBDW2014 - MockBox, get ready to mock your socks off!
 
introduction of Object oriented programming
introduction of Object oriented programmingintroduction of Object oriented programming
introduction of Object oriented programming
 
Ios development
Ios developmentIos development
Ios development
 
Irving iOS Jumpstart Meetup - Objective-C Session 2
Irving iOS Jumpstart Meetup - Objective-C Session 2Irving iOS Jumpstart Meetup - Objective-C Session 2
Irving iOS Jumpstart Meetup - Objective-C Session 2
 
UML for Aspect Oriented Design
UML for Aspect Oriented DesignUML for Aspect Oriented Design
UML for Aspect Oriented Design
 
Java tutorial part 4
Java tutorial part 4Java tutorial part 4
Java tutorial part 4
 

Mehr von DataArt

DataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR PartnersDataArt
 
Event management в IT
Event management в ITEvent management в IT
Event management в ITDataArt
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from insideDataArt
 
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)DataArt
 
DevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDataArt
 
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtIT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtDataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han... «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...DataArt
 
Communication in QA's life
Communication in QA's lifeCommunication in QA's life
Communication in QA's lifeDataArt
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиDataArt
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOpsDataArt
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real lifeDataArt
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестированияDataArt
 
Selenoid
SelenoidSelenoid
SelenoidDataArt
 
Selenide
SelenideSelenide
SelenideDataArt
 
A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"DataArt
 
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...DataArt
 
IT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGIT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGDataArt
 

Mehr von DataArt (20)

DataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human Approach
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life Sciences
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital Markets
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR Partners
 
Event management в IT
Event management в ITEvent management в IT
Event management в IT
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from inside
 
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
 
DevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проект
 
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtIT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han... «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 
Communication in QA's life
Communication in QA's lifeCommunication in QA's life
Communication in QA's life
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOps
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real life
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестирования
 
Selenoid
SelenoidSelenoid
Selenoid
 
Selenide
SelenideSelenide
Selenide
 
A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"
 
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
 
IT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGIT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNG
 

Kürzlich hochgeladen

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 

Kürzlich hochgeladen (20)

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 

Никита Корчагин - Programming Apple iOS with Objective-C

  • 1. Programming  iOS with Objective-C Nikita Korchagin
  • 3.
  • 4. Today •Introduction •Starting iOS programming •iOS development •Objective-C language - methods, properties, protocols... •Model-View-Controller pattern •Desktop vs. Mobile: what’s different •Human Interface Guidelines •Further steps: materials to read
  • 5. How to start to develop for iOS?
  • 6. Jedi way •Intel-based Mac (Mac Mini, MacBook Air/Pro, iMac, Mac Pro) •Installed Mac OS X 10.7 «Lion» or higher •XCode 6 with latest iOS SDK •Own i-Device (iPhone/iPod Touch/iPad) •Apple Developer program account ($99 per 1 year) •Good knowledge of design patterns •Objective-C knowledge OR •Relevant experience in C or any strong-typed object-oriented language like Java/C#/C++
  • 7. Alternative ways •Alternative IDE - AppCode (Mac, still requires Xcode to be installed) •Objective-C++ (kernel - C++, UI - Objective-C) •PhoneGap/Titanium (cross-platform) •Xamarin (.NET/C# - compiles to native code) •C++ Marmalade SDK for Visual Studio •Unity3D/Cocos2D-x for game development •HTML5/CSS3/JavaScript for web applications
  • 9. •Swift is a multi-paradigm, compiled programming language created by Apple Inc. for iOS and OS X development. •It uses the Objective-C runtime, allowing C, Objective-C, C++ and Swift code to run within a single program. •Swift was introduced at Apple's 2014 WWDC and Swift 2 at WWDC 2015. Initially a proprietary language, it was announced that Swift 2 would become open source supporting iOS, OS X and Linux. •Swift supports the core concepts that made Obj-C flexible, notably dynamic dispatch, widespread late binding, extensible programming and similar features. •Swift has added the concept of protocol extensibility, an extensibility system that can be applied to types, structs and classes, Apple promotes this as a real change in programming paradigms they refer to as protocol-oriented programming.
  • 11. •Objective-C is a general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language. •It is the main programming language used by Apple until 2014. •Originally developed in the early 1980s, it was selected as the main language used by NeXT for its NeXTSTEP operating system. •Objective-C is a thin layer on top of C, and moreover is a strict superset of C. •All of the syntax for non-object-oriented operations (including primitive variables, pre-processing, expressions, function declarations, and function calls) are identical to that of C. •Syntax for object-oriented features is an implementation of Smalltalk-style messaging.
  • 12. Method Syntax •Dash for instance method. Plus for class method. - (NSArray *)shipsAtPoint:(CGPoint)bombLocation withDamage:(BOOL)damaged;
  • 13. Instance methods •“Normal” methods you are used to. •Can access instance variables inside as if they were locals. •Can send messages to self and super inside. •Both dispatch the message to the calling object, but use different implementations. •If a superclass of yours calls a method on self, it will your implementation (if one exists). •Example calling syntax: BOOL destroyed = [ship dropBomb:bombType at:dropPoint from:height];
  • 14. Class methods •Used for allocation, singletons, utilities. + (id)alloc; //makes space for an object of the receiver’s class (always pair w/init) + (id)motherShip; //returns the one and only, shared (singleton) mother ship instance + (int)turretsOnShipOfSize:(int)shipSize; // informational utility method •Can not access instance variables inside. •Messages to self and super mean something a little different. Both invoke only other class methods. Inheritance does work. CalculatorBrain *brain = [[CalculatorBrain alloc] init]; Ship *theMotherShip = [Ship motherShip]; Ship *newShip = [Ship shipWithTurrentCount:5]; int turretsOnMediumSizedShip = [Ship turretsOnShipOfSize:4];
  • 15. Instance variables •By default, instance variables are @protected (only the class and subclasses can access). •Can be marked @private (only the class can access) or @public (anyone can access). @interface MyObject : NSObject { int foo; //protected @private int eye; //private @protected int bar; //protected @public int forum; //public int apology; //public @private int jet; //private }
  • 16. Properties •Information from the previous slide doesn’t use in the modern Objective-C! •Use @property and “dot notation” to access instance variables. @interface MyObject : NSObject @property int eye; @end •If you use the readonly keyword, only the getter will be declared @implementation MyObject @synthesize eye = _eye; //generate getters/setters - (int)eye { return _eye; } - (void)setEye:(int)eye { _eye = eye; } @end
  • 17. Properties •It’s common to use dot notation to access ivars inside your class •It’s not the same as referencing the instance variable directly. •The latter calls the getter method (which is usually what you want for subclassability). •There’s more to think about when a @property is an object. But it’s all about memory management. int x = _eye; int y = self.eye;
  • 18. Dynamic binding •All objects are allocated in the heap, so you always use a pointer. •Decision about code to run on message send happens at runtime. Not at compile time. None of the decision is made at compile time. •Static typing (e.g. NSString * vs. self) is purely an aid to the compiler to help you find bugs. •If neither the class of the receiving object nor its superclasses implements that method: crash! •It is legal (and sometimes even good code) to “cast” a pointer. But we usually do it only after we’ve used “introspection” to find out more about the object.
  • 19. Introspection •So when do we use id? Isn’t it always bad? No, we might have a collection (e.g. an array) of objects of different classes. But we’d have to be sure we know which was which before we sent messages to them. How do we do that? Introspection. •All objects that inherit from NSObject know these methods isKindOfClass: //returns whether an object is that kind of class (inheritance included) isMemberOfClass: //returns whether an object is that kind of class (no inheritance) respondsToSelector: //returns whether an object responds to a given method •Arguments to these methods are a little tricky. Class testing methods take a Class. You get a Class by sending the class method class to a class :) if ([obj isKindOfClass:[NSString class]]) { NSString *s = [(NSString *)obj stringByAppendingString:@"xyzzy"]; }
  • 20. Introspection •Method testing methods take a selector (SEL). •Special @selector() directive turns the name of a method into a selector. • SEL is the Objective-C “type” for a selector •If you have a SEL, you can ask an object to perform it if ([obj respondsToSelector:@selector(shoot)]) { [obj shoot]; } [obj performSelector:shootSelector]; [obj performSelector:moveToSelector withObject:coordinate];
  • 21. nil •The value of an object pointer that does not point to anything •Like “zero” for a primitive type (int, double, etc.). Actually, it’s not “like” zero: it is zero. • NSObject sets all its instance variables to zero. Thus, instance variables that are pointers to objects start out with the value of nil. •Sending messages to nil is (mostly) okay. No code gets executed.
  • 22. Protocols •Similar to @interface, but no implementation @protocol Foo - (void)doSomething; // implementors must implement this @optional - (int)getSomething; // implementors do not need to implement this @required - (NSArray *)getManySomethings:(int)howMany; // must implement @end •Classes then implement it. They must proclaim that they implement it in their @interface @interface MyClass : NSObject <Foo> ... @end •You must implement all non-@optional methods •Just like static typing, this is all just compiler-helping-you stuff It makes no difference at runtime.
  • 23. Protocols •Think of it as documentation for your method interfaces •Number one use of protocols in iOS: delegates and dataSources •The delegate or dataSource is always defined as an assign @property
 @property (assign) id <UIApplicationDelegate> delegate; •Always assumed that the object serving as delegate will outlive the object doing the delegating.
  • 25. Reference Counting •How does it work? Simple set of rules everyone must follow. •You take ownership for an object you want to keep a pointer to. Multiple owners for a given object is okay (common). •When you’re done with an object, you give up that ownership. There’s a way to take “temporary” ownership too. •When no one claims ownership for an object, it gets deallocated After that point, your program will crash if that object gets sent a message!
  • 26. Reference Counting •How does it work? Simple set of rules everyone must follow. •You take ownership for an object you want to keep a pointer to. Multiple owners for a given object is okay (common). •When you’re done with an object, you give up that ownership. There’s a way to take “temporary” ownership too. •When no one claims ownership for an object, it gets deallocated After that point, your program will crash if that object gets sent a message!
  • 29. Temporary ownership •So how does this “temporary ownership” thing work? •If you want to give someone an object with the “option” for them to take ownership of it, you must take ownership of it yourself, then send the object the message autorelease (or obtain a temporarily owned object from somewhere else, modify it, then give it away). •Your ownership will “expire” at some future time (but not before the current event is finished). In the meantime, someone else can send retain to the object if they want to own it themselves.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40. MVC
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 72. View Controller •Class is UIViewController. It’s your Controller in an MVC grouping. •VERY important property in UIViewController @property (retain) UIView *view; •This is a pointer to the top-level UIView in the Controller’s View (in MVC terms) •View Controllers have a “lifecycle” from creation to destruction. Your subclass gets opportunities to participate in that lifecycle by overriding methods
  • 73. Controller of Controllers •Special View Controllers that manage a collection of other MVCs • UINavigationController manages a hierarchical flow of MVCs and presents them like a “stack of cards”. Very, very, very commonly used on the iPhone • UITabBarController manages a group of independent MVCs selected using tabs on the bottom of the screen • UISplitViewController side-by-side, master->detail arrangement of two MVCs. iPad only •Custom containers (iOS 5 and later)
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 81. What’s different? •Multitouch display & gestures •Front and rear camera •Speakers and microphone •Location subsystem - GPS/GLONASS •Magnetometer and compass •G-sensor and accelerometer •Bluetooth accessories
  • 82. Network •Variants of connection •GPRS •EDGE •3G/4G •WiFi •All these opportunities (except WiFi) are connection- lost-prone •Cellular network connection is expensive
  • 83. Screens •Fullscreen applications •Bigger UI elements for fingers •Dark colors to reduce energy consumption •Different resolutions (x1, x2 and x3) •Assets for different resolutions •Ergonomics
  • 84. Resources •Every heavy application dramatically drains battery’s life •Geolocation - GPS •Networking •Disk capacity is limited (8/16/32/64/… GB and no SD/ microSD slot) •Restricted multitasking (full introduced in iOS 7) •Only a few types of content are supported •UI is rendered using real-time thread and shouldn’t be blocked ever
  • 85. Security mechanisms •Sandboxing - every application is isolated and runs under restricted user’s account («jailed») •IPC is limited to URL schemas and extensions •Personal data and passwords should be encrypted (Keychain) or not stored on the device at all •HTTPS connections are preferred; certificate validation is needed •Data on disk can be encrypted and protected by iOS •Group policies can be established for iOS devices using configuration profiles
  • 86. Creating and submitting the app •Application should be tested thoroughly; crashes are forbidden •Application should follow Apple’s Human Interface Guidelines •Private API usage is forbidden •Application can be deployed only to the device which is in the provisioning list •Application’s binary is signed using developer’s private key •Application is thoroughly tested during review process
  • 88. HIG
  • 89. HIG
  • 90. HIG
  • 91. HIG
  • 100. flat UI vs. skeuomorphism
  • 102. Q&A
  • 103. Thanks for your attention!