SlideShare a Scribd company logo
Programming  iOS with
Objective-C
Nikita Korchagin
Developer
Никита Корчагин - Programming Apple iOS with Objective-C
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.
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
MVC
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
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)
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
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!

More Related Content

What's hot (20)

Simply - OOP - Simply
Simply - OOP - SimplySimply - OOP - Simply
Simply - OOP - Simply
Thomas 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 weeks
Calvin Cheng
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
Rangana Sampath
 
iOS Beginners Lesson 2
iOS Beginners Lesson 2iOS Beginners Lesson 2
iOS Beginners Lesson 2
Calvin Cheng
 
2CPP04 - Objects and Classes
2CPP04 - Objects and Classes2CPP04 - Objects and Classes
2CPP04 - Objects and Classes
Michael 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 APIs
Subhransu Behera
 
Objective-C talk
Objective-C talkObjective-C talk
Objective-C talk
bradringel
 
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
Simobo
 
[UniteKorea2013] The Unity Rendering Pipeline
[UniteKorea2013] The Unity Rendering Pipeline[UniteKorea2013] The Unity Rendering Pipeline
[UniteKorea2013] The Unity Rendering Pipeline
William Hugo Yang
 
Basic info on java intro
Basic info on java introBasic info on java intro
Basic info on java intro
kabirmahlotra
 
Introduction to java
Introduction to javaIntroduction to java
Introduction to java
AbhishekMondal42
 
Intermediate JavaScript
Intermediate JavaScriptIntermediate JavaScript
Intermediate JavaScript
☆ Milan Adamovsky ☆
 
Metaprogramming ruby
Metaprogramming rubyMetaprogramming ruby
Metaprogramming ruby
GeekNightHyderabad
 
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
Philip Langer
 
Advance JS and oop
Advance JS and oopAdvance JS and oop
Advance JS and oop
Abuzer Firdousi
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference Counting
Robert Brown
 
JavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayJavaScript in Object-Oriented Way
JavaScript in Object-Oriented Way
Chamnap Chhorn
 
Eero cocoaheadssf-talk
Eero cocoaheadssf-talkEero cocoaheadssf-talk
Eero cocoaheadssf-talk
Andy Arvanitis
 
Extending the Xbase Typesystem
Extending the Xbase TypesystemExtending the Xbase Typesystem
Extending the Xbase Typesystem
Sebastian 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 Scala
Filip Krikava
 
Simply - OOP - Simply
Simply - OOP - SimplySimply - OOP - Simply
Simply - OOP - Simply
Thomas 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 weeks
Calvin Cheng
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
Rangana Sampath
 
iOS Beginners Lesson 2
iOS Beginners Lesson 2iOS Beginners Lesson 2
iOS Beginners Lesson 2
Calvin Cheng
 
2CPP04 - Objects and Classes
2CPP04 - Objects and Classes2CPP04 - Objects and Classes
2CPP04 - Objects and Classes
Michael 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 APIs
Subhransu Behera
 
Objective-C talk
Objective-C talkObjective-C talk
Objective-C talk
bradringel
 
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
Simobo
 
[UniteKorea2013] The Unity Rendering Pipeline
[UniteKorea2013] The Unity Rendering Pipeline[UniteKorea2013] The Unity Rendering Pipeline
[UniteKorea2013] The Unity Rendering Pipeline
William Hugo Yang
 
Basic info on java intro
Basic info on java introBasic info on java intro
Basic info on java intro
kabirmahlotra
 
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
Philip Langer
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference Counting
Robert Brown
 
JavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayJavaScript in Object-Oriented Way
JavaScript in Object-Oriented Way
Chamnap Chhorn
 
Eero cocoaheadssf-talk
Eero cocoaheadssf-talkEero cocoaheadssf-talk
Eero cocoaheadssf-talk
Andy Arvanitis
 
Extending the Xbase Typesystem
Extending the Xbase TypesystemExtending the Xbase Typesystem
Extending the Xbase Typesystem
Sebastian 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 Scala
Filip Krikava
 

Viewers also liked (20)

"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен..."Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
DataArt
 
Movie distributors
Movie distributorsMovie distributors
Movie distributors
Abbey Cotterill
 
Application form
Application formApplication form
Application form
sksknba5015
 
«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 Plant
Akshar 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 2
PlantHealthResourceCenter
 
180 blue dining room training
180 blue dining room training180 blue dining room training
180 blue dining room training
Bill Buffalo
 
Benefits for Millennials
Benefits for MillennialsBenefits for Millennials
Benefits for Millennials
UrbanBound
 
Pen pc tecn
Pen pc tecnPen pc tecn
Pen pc tecn
Rajeshwar Reddy
 
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
Joel Quintana
 
Роман Денисенко — Нагрузочное тестирование для самых маленьких.
Роман Денисенко — Нагрузочное тестирование для самых маленьких.Роман Денисенко — Нагрузочное тестирование для самых маленьких.
Роман Денисенко — Нагрузочное тестирование для самых маленьких.
DataArt
 
Sam mendes
Sam mendesSam mendes
Sam mendes
spencerajjohnston
 
Riley slides (2)
Riley slides (2)Riley slides (2)
Riley slides (2)
Carisma Dunbar
 
Сергей Зиновьев и Игорь Ходырев - Ruby on Rails
Сергей Зиновьев и Игорь Ходырев - Ruby on RailsСергей Зиновьев и Игорь Ходырев - Ruby on Rails
Сергей Зиновьев и Игорь Ходырев - Ruby on Rails
DataArt
 
Николай Хабаров — Эволюция IoT
Николай Хабаров — Эволюция IoTНиколай Хабаров — Эволюция IoT
Николай Хабаров — Эволюция IoT
DataArt
 
Liquid/Syrup/Oral Manufacturing Plant
Liquid/Syrup/Oral Manufacturing PlantLiquid/Syrup/Oral Manufacturing Plant
Liquid/Syrup/Oral Manufacturing Plant
Akshar Engineering Works
 
Thriller's best villains
Thriller's best villainsThriller's best villains
Thriller's best villains
spencerajjohnston
 
Александр Богданов «Lambda - архитектура»
Александр Богданов «Lambda - архитектура»Александр Богданов «Lambda - архитектура»
Александр Богданов «Lambda - архитектура»
DataArt
 
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен..."Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
"Тестирование в Agile в среде виртуализации Vagrant+Docker", Владимир Сидорен...
DataArt
 
Application form
Application formApplication form
Application form
sksknba5015
 
«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 Plant
Akshar 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 2
PlantHealthResourceCenter
 
180 blue dining room training
180 blue dining room training180 blue dining room training
180 blue dining room training
Bill Buffalo
 
Benefits for Millennials
Benefits for MillennialsBenefits for Millennials
Benefits for Millennials
UrbanBound
 
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
Joel Quintana
 
Роман Денисенко — Нагрузочное тестирование для самых маленьких.
Роман Денисенко — Нагрузочное тестирование для самых маленьких.Роман Денисенко — Нагрузочное тестирование для самых маленьких.
Роман Денисенко — Нагрузочное тестирование для самых маленьких.
DataArt
 
Сергей Зиновьев и Игорь Ходырев - Ruby on Rails
Сергей Зиновьев и Игорь Ходырев - Ruby on RailsСергей Зиновьев и Игорь Ходырев - Ruby on Rails
Сергей Зиновьев и Игорь Ходырев - Ruby on Rails
DataArt
 
Николай Хабаров — Эволюция IoT
Николай Хабаров — Эволюция IoTНиколай Хабаров — Эволюция IoT
Николай Хабаров — Эволюция IoT
DataArt
 
Александр Богданов «Lambda - архитектура»
Александр Богданов «Lambda - архитектура»Александр Богданов «Lambda - архитектура»
Александр Богданов «Lambda - архитектура»
DataArt
 

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

Bootstrapping iPhone Development
Bootstrapping iPhone DevelopmentBootstrapping iPhone Development
Bootstrapping iPhone Development
ThoughtWorks
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not Java
Chris 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-C
Andrew Rohn
 
Objective-C for iOS Application Development
Objective-C for iOS Application DevelopmentObjective-C for iOS Application Development
Objective-C for iOS Application Development
Dhaval Kaneria
 
Cappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application FrameworkCappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application Framework
Andreas Korth
 
Ahieving Performance C#
Ahieving Performance C#Ahieving Performance C#
Ahieving Performance C#
Roman Atachiants
 
Iphone course 1
Iphone course 1Iphone course 1
Iphone course 1
Janet Huang
 
Objective-c for Java Developers
Objective-c for Java DevelopersObjective-c for Java Developers
Objective-c for Java Developers
Muhammad Abdullah
 
Method Swizzling with Objective-C
Method Swizzling with Objective-CMethod Swizzling with Objective-C
Method Swizzling with Objective-C
AdamFallon4
 
Objective c
Objective cObjective c
Objective c
ricky_chatur2005
 
Ios development
Ios developmentIos development
Ios development
elnaqah
 
ppt_on_java.pptx
ppt_on_java.pptxppt_on_java.pptx
ppt_on_java.pptx
MAYANKKUMAR492040
 
CPP13 - Object Orientation
CPP13 - Object OrientationCPP13 - Object Orientation
CPP13 - Object Orientation
Michael 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 programming
RiturajJain8
 
Ios development
Ios developmentIos development
Ios development
Shakil Ahmed
 
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
irving-ios-jumpstart
 
UML for Aspect Oriented Design
UML for Aspect Oriented DesignUML for Aspect Oriented Design
UML for Aspect Oriented Design
Edison Lascano
 
Java tutorial part 4
Java tutorial part 4Java tutorial part 4
Java tutorial part 4
Mumbai Academisc
 
Bootstrapping iPhone Development
Bootstrapping iPhone DevelopmentBootstrapping iPhone Development
Bootstrapping iPhone Development
ThoughtWorks
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not Java
Chris 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-C
Andrew Rohn
 
Objective-C for iOS Application Development
Objective-C for iOS Application DevelopmentObjective-C for iOS Application Development
Objective-C for iOS Application Development
Dhaval Kaneria
 
Cappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application FrameworkCappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application Framework
Andreas Korth
 
Objective-c for Java Developers
Objective-c for Java DevelopersObjective-c for Java Developers
Objective-c for Java Developers
Muhammad Abdullah
 
Method Swizzling with Objective-C
Method Swizzling with Objective-CMethod Swizzling with Objective-C
Method Swizzling with Objective-C
AdamFallon4
 
Ios development
Ios developmentIos development
Ios development
elnaqah
 
CPP13 - Object Orientation
CPP13 - Object OrientationCPP13 - Object Orientation
CPP13 - Object Orientation
Michael 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 programming
RiturajJain8
 
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
irving-ios-jumpstart
 
UML for Aspect Oriented Design
UML for Aspect Oriented DesignUML for Aspect Oriented Design
UML for Aspect Oriented Design
Edison Lascano
 

More from 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
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life Sciences
DataArt
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital Markets
DataArt
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR Partners
DataArt
 
Event management в IT
Event management в ITEvent management в IT
Event management в IT
DataArt
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from inside
DataArt
 
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. Польза или вред? Максим Бастион, DataArt
DataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (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 life
DataArt
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
DataArt
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOps
DataArt
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real life
DataArt
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестирования
DataArt
 
Selenoid
SelenoidSelenoid
Selenoid
DataArt
 
Selenide
SelenideSelenide
Selenide
DataArt
 
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: Как я перестал бояться и полюбил TestNG
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 Approach
DataArt
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life Sciences
DataArt
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital Markets
DataArt
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR Partners
DataArt
 
Event management в IT
Event management в ITEvent management в IT
Event management в IT
DataArt
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from inside
DataArt
 
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. Польза или вред? Максим Бастион, DataArt
DataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (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 life
DataArt
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
DataArt
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOps
DataArt
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real life
DataArt
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестирования
DataArt
 
Selenoid
SelenoidSelenoid
Selenoid
DataArt
 
Selenide
SelenideSelenide
Selenide
DataArt
 
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: Как я перестал бояться и полюбил TestNG
DataArt
 

Recently uploaded (20)

HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
MINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PRMINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PR
MIND CTI
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdfAre Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Telecoms Supermarket
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Unlocking the Power of IVR: A Comprehensive Guide
Unlocking the Power of IVR: A Comprehensive GuideUnlocking the Power of IVR: A Comprehensive Guide
Unlocking the Power of IVR: A Comprehensive Guide
vikasascentbpo
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
MINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PRMINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PR
MIND CTI
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdfAre Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Telecoms Supermarket
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Unlocking the Power of IVR: A Comprehensive Guide
Unlocking the Power of IVR: A Comprehensive GuideUnlocking the Power of IVR: A Comprehensive Guide
Unlocking the Power of IVR: A Comprehensive Guide
vikasascentbpo
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 

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

  • 1. Programming  iOS with Objective-C Nikita Korchagin
  • 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.
  • 40. MVC
  • 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)
  • 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!