SlideShare a Scribd company logo
Objective-C for
                           Java Developers
                                   http://bobmccune.com




Tuesday, August 10, 2010
Objective-C Overview




Tuesday, August 10, 2010
Objective-C
                 The old new hotness
                    • Strict superset of ANSI C
                           • Object-oriented extensions
                           • Additional syntax and types
                    • Native Mac & iOS development language
                    • Flexible typing
                    • Simple, expressive syntax
                    • Dynamic runtime


Tuesday, August 10, 2010
Why Use Objective-C?
                 No Java love from Apple?
                    • Key to developing for Mac & iOS platforms
                    • Performance
                           • Continually optimized runtime environment
                             • Can optimize down to C as needed
                           • Memory Management
                    • Dynamic languages provide greater flexibility
                           • Cocoa APIs rely heavily on these features


Tuesday, August 10, 2010
Java Developer’s Concerns
                Ugh, didn’t Java solve all of this stuff
                    • Pointers
                    • Memory Management
                    • Preprocessing & Linking
                    • No Namespaces
                           • Prefixes used to avoid collisions
                           • Common Prefixes: NS, UI, CA, MK, etc.



Tuesday, August 10, 2010
Creating Classes




Tuesday, August 10, 2010
Classes
                    • Classes define the blueprint for objects.
                    • Objective-C class definitions are separated
                           into an interface and an implementation.
                           • Usually defined in separate .h and .m files
                                    •Defines the            •Defines the actual
                                     programming            implementation
                                     interface              code

                                    •Defines the             •Defines one or
                                     object's instance      more initializers
                                     variable               to properly
                                                            initialize and
                                                            object instance




Tuesday, August 10, 2010
Defining the class interface
                  @interface BankAccount : NSObject {
                    float accountBalance;
                    NSString *accountNumber;
                  }

                  - (float)withDraw:(float)amount;
                  - (void)deposit:(float)amount;
                  @end




Tuesday, August 10, 2010
Defining the class interface
                  @interface BankAccount : NSObject {
                    float accountBalance;
                    NSString *accountNumber;
                  }

                  - (float)withDraw:(float)amount;
                  - (void)deposit:(float)amount;
                  @end




Tuesday, August 10, 2010
Defining the class interface
                  @interface BankAccount : NSObject {
                    float accountBalance;
                    NSString *accountNumber;
                  }

                  - (float)withDraw:(float)amount;
                  - (void)deposit:(float)amount;
                  @end




Tuesday, August 10, 2010
Defining the class interface
                  @interface BankAccount : NSObject {
                    float accountBalance;
                    NSString *accountNumber;
                  }

                  - (float)withDraw:(float)amount;
                  - (void)deposit:(float)amount;
                  @end




Tuesday, August 10, 2010
Defining the class interface
                  @interface BankAccount : NSObject {
                    float accountBalance;
                    NSString *accountNumber;
                  }

                  - (float)withDraw:(float)amount;
                  - (void)deposit:(float)amount;
                  @end




Tuesday, August 10, 2010
Defining the class interface
                  @interface BankAccount : NSObject {
                    float accountBalance;
                    NSString *accountNumber;
                  }

                  - (float)withDraw:(float)amount;
                  - (void)deposit:(float)amount;
                  @end




Tuesday, August 10, 2010
Defining the class implementation
                   #import "BankAccount.h"

                   @implementation BankAccount

                   - (id)init {
                     self = [super init];
                     return self;
                   }

                   - (float)withdraw:(float)amount {
                     // calculate valid withdrawal
                   	 return amount;
                   }

                   - (void)deposit:(float)amount {
                        // record transaction
                   }
                   @end


Tuesday, August 10, 2010
Defining the class implementation
                   #import "BankAccount.h"

                   @implementation BankAccount

                   - (id)init {
                     self = [super init];
                     return self;
                   }

                   - (float)withdraw:(float)amount {
                     // calculate valid withdrawal
                   	 return amount;
                   }

                   - (void)deposit:(float)amount {
                        // record transaction
                   }
                   @end


Tuesday, August 10, 2010
Defining the class implementation
                   #import "BankAccount.h"

                   @implementation BankAccount

                   - (id)init {
                     self = [super init];
                     return self;
                   }

                   - (float)withdraw:(float)amount {
                     // calculate valid withdrawal
                   	 return amount;
                   }

                   - (void)deposit:(float)amount {
                        // record transaction
                   }
                   @end


Tuesday, August 10, 2010
Defining the class implementation
                   #import "BankAccount.h"

                   @implementation BankAccount

                   - (id)init {
                     self = [super init];
                     return self;
                   }

                   - (float)withdraw:(float)amount {
                     // calculate valid withdrawal
                   	 return amount;
                   }

                   - (void)deposit:(float)amount {
                        // record transaction
                   }
                   @end


Tuesday, August 10, 2010
Working with Objects




Tuesday, August 10, 2010
Creating Objects
                 From blueprint to reality
                  • No concept of constructors in Objective-C
                  • Regular methods create new instances
                           • Allocation and initialization are performed
                            separately
                             • Provides flexibility in where an object is allocated
                             • Provides flexibility in how an object is initialized
                    Java
                   BankAccount account = new BankAccount();

                   Objective C
                   BankAccount *account = [[BankAccount alloc] init];


Tuesday, August 10, 2010
Creating Objects
                • NSObject defines class method called alloc
                      • Dynamically allocates memory for object
                      • Returns new instance of receiving class
                           BankAccount *account = [BankAccount alloc];

                • NSObject defines instance method init
                      • Implemented by subclasses to initialize instance after memory
                           for it has been allocated
                      • Subclasses commonly define several initializers
                           account = [account init];

                •    alloc     and init calls are almost always nested into single line
                           BankAccount *account = [[BankAccount alloc] init];



Tuesday, August 10, 2010
Methods
                 • Classes can define both class and instance methods
                 • Methods are always public.
                   • “Private” methods defined in implementation
                 • Class methods (prefixed with +):
                       • Define behaviors associated with class, not particular
                           instance
                       •   No access to instance variables
                 • Instance methods (prefixed with -)
                       • Define behaviors specific to particular instance
                       • Manage object state
                 • Methods invoked by passing messages...
Tuesday, August 10, 2010
Messages
                 Speaking to objects
                  • Methods are invoked by passing messages
                           • Done indirectly. We never directly invoke
                               methods
                           •   Messages dynamically bound to method
                               implementations at runtime
                           •   Dispatching handled by runtime environment
                    • Simple messages take the form:
                           •




                               [object message];

                    • Can pass one or more arguments:
                           •




                               [object messageWithArg1:arg1 arg2:arg2];


Tuesday, August 10, 2010
self          and super
                    • Methods have implicit reference to owning
                      object called self (similar to Java’s this)
                    • Additionally have access to superclass
                      methods using super

                           -(id)init {
                              if (self = [super init]) {
                                 // do initialization
                              }
                              return self;
                           }

Tuesday, August 10, 2010
Invoking methods in Java
                Map person = new HashMap();

                person.put("name", "Joe Smith");
                String address = "123 Street";
                String house = address.substring(0, 3);
                person.put("houseNumber", house);

                List children = Arrays.asList("Sue", "Tom");
                person.put("children", children);




Tuesday, August 10, 2010
Invoking methods in Objective-C
                NSMutableDictionary *person =
                     [NSMutableDictionary dictionary];

                [person setObject:@"Joe Smith" forKey:@"name"];

                NSString *address = @"123 Street";
                NSString *house =
                    [address substringWithRange:NSMakeRange(0, 3)];
                [person setObject:house forKey:@"houseNumber"];

                NSArray *children =
                   [NSArray arrayWithObjects:@"Sue", @"Tom", nil];

                [person setObject:children forKey:@"children"];




Tuesday, August 10, 2010
Memory Management




Tuesday, August 10, 2010
Memory Management
                 Dude, where’s my Garbage Collection?
                 • Garbage collection available for Mac apps (10.5+)
                   • Use it if targeting 10.5+!
                   • Use explicit memory management if targeting
                        <= 10.4
                 •    No garbage collection on iOS due to performance
                      concerns.
                 •    Memory managed using simple reference counting
                      mechanism:
                      • Higher level abstraction than malloc / free
                       • Straightforward approach, but must adhere to
                           conventions and rules

Tuesday, August 10, 2010
Memory Management
                 Reference Counting
                    • Objective-C objects are reference counted
                           • Objects start with reference count of 1
                           • Increased with retain
                           • Decreased with release, autorelease
                           • When count equals 0, runtime invokes dealloc
                                      1            2             1             0
                              alloc       retain       release       release




Tuesday, August 10, 2010
Memory Management
                   Understanding the rules
                   • Implicitly retain any object you create using:
                           Methods starting with "alloc", "new", or contains "copy"
                           e.g alloc, allocWithZone, newObject, mutableCopy,etc.
                    • If you've retained it, you must release it
                    • Many objects provide convenience methods
                      that return an autoreleased reference.
                    • Holding object reference from these
                      methods does not make you the retainer
                      • However, if you retain it you need an
                        offsetting release or autorelease to free it

Tuesday, August 10, 2010
retain / release / autorelease
                 @implementation BankAccount

                 - (NSString *)accountNumber {
                     return [[accountNumber retain] autorelease];
                 }

                 - (void)setAccountNumber:(NSString *)newNumber {
                     if (accountNumber != newNumber) {
                         [accountNumber release];
                         accountNumber = [newNumber retain];
                     }
                 }

                 - (void)dealloc {
                     [self setAccountNumber:nil];
                     [super dealloc];
                 }

                 @end
Tuesday, August 10, 2010
Properties




Tuesday, August 10, 2010
Properties
                 Simplifying Accessors
                  • Object-C 2.0 introduced new syntax for defining
                       accessor code
                           • Much less verbose, less error prone
                           • Highly configurable
                           • Automatically generates accessor code
                  • Compliments existing conventions and technologies
                           •   Key-Value Coding (KVC)
                           •   Key-Value Observing (KVO)
                           •   Cocoa Bindings
                           •   Core Data


Tuesday, August 10, 2010
Properties: Interface
               @property(attributes) type variable;

                             Attribute      Impacts
                 readonly/readwrite         Mutability

                  assign/retain/copy         Storage

                             nonatomic     Concurrency

                           setter/getter       API



Tuesday, August 10, 2010
Properties: Interface
               @property(attributes) type variable;

                             Attribute      Impacts
                 readonly/readwrite         Mutability

                  assign/retain/copy         Storage

                             nonatomic     Concurrency

                           setter/getter       API

                @property(readonly) NSString *acctNumber;

Tuesday, August 10, 2010
Properties: Interface
               @property(attributes) type variable;

                             Attribute       Impacts
                 readonly/readwrite         Mutability

                  assign/retain/copy         Storage

                             nonatomic     Concurrency

                           setter/getter       API

                @property(readwrite, copy) NSString *acctNumber;


Tuesday, August 10, 2010
Properties: Interface
               @property(attributes) type variable;

                             Attribute      Impacts
                 readonly/readwrite         Mutability

                  assign/retain/copy         Storage

                             nonatomic     Concurrency

                           setter/getter       API

                @property(nonatomic, retain) NSDate *activeOn;

Tuesday, August 10, 2010
Properties: Interface
               @property(attributes) type variable;

                             Attribute         Impacts
                 readonly/readwrite            Mutability

                  assign/retain/copy            Storage

                             nonatomic       Concurrency

                           setter/getter          API

                @property(readonly, getter=username) NSString *name;


Tuesday, August 10, 2010
Properties: Interface
                @interface BankAccount : NSObject {
                    NSString *accountNumber;
                    NSDecimalNumber *balance;
                    NSDecimalNumber *fees;
                    BOOL accountCurrent;
                }

                @property(readwrite, copy) NSString *accountNumber;
                @property(readwrite, retain) NSDecimalNumber *balance;
                @property(readonly) NSDecimalNumber *fees;
                @property(getter=isCurrent) BOOL accountCurrent;

                @end




Tuesday, August 10, 2010
Properties: Interface
                                                         New in 10.6
                @interface BankAccount : NSObject {       and iOS 4
                  // Look ma, no more ivars
                }

                @property(readwrite, copy) NSString *accountNumber;
                @property(readwrite, retain) NSDecimalNumber *balance;
                @property(readonly) NSDecimalNumber *fees;
                @property(getter=isCurrent) BOOL accountCurrent;

                @end




Tuesday, August 10, 2010
Properties: Implementation
                @implementation BankAccount

                @synthesize   accountNumber;
                @synthesize   balance;
                @synthesize   fees;
                @synthesize   accountCurrent;

                ...

                @end



Tuesday, August 10, 2010
Properties: Implementation
               @implementation BankAccount    New in 10.6
                                               and iOS 4

               // no more @synthesize statements

               ...

               @end




Tuesday, August 10, 2010
Accessing Properties
                    • Generated properties are standard methods
                    • Accessed through normal messaging syntax
                           [object property];
                           [object setProperty:(id)newValue];

                    • Objective-C 2.0 property access via dot syntax
                           object.property;
                           object.property = newValue;


                           Dot notation is just syntactic sugar. Still uses accessor
                           methods. Doesn't get/set values directly.

Tuesday, August 10, 2010
Protocols




Tuesday, August 10, 2010
Protocols
                 Java’s Interface done Objective-C style
                • List of method declarations
                      • Not associated with a particular class
                      • Conformance, not class, is important
                • Useful in defining:
                      • Methods that others are expected to
                           implement
                      •    Declaring an interface while hiding its particular
                           class
                      •    Capturing similarities among classes that aren't
                           hierarchically related


Tuesday, August 10, 2010
Protocols
                NSCoding            NSObject              NSCoding




                           Person              Account




                              CheckingAccount       SavingAccount




Tuesday, August 10, 2010
Defining a Protocol
                NSCoding from Foundation Framework
                Objective-C equivalent to java.io.Externalizable

                @protocol NSCoding

                - (void)encodeWithCoder:(NSCoder *)aCoder;
                - (id)initWithCoder:(NSCoder *)aDecoder;

                @end




Tuesday, August 10, 2010
Adopting a Protocol
                @interface   Person : NSObject <NSCoding> {
                  NSString   *name;
                  NSString   *street;
                  NSString   *city, *state, *zip;
                }

                // method declarations

                @end




Tuesday, August 10, 2010
Conforming to a Protocol
                    Partial implementation of conforming Person class
                   @implementation Person

                   -(id)initWithCoder:(NSCoder *)coder {
                   	 if (self = [super init]) {
                   	 	 name = [coder decodeObjectForKey:@"name"];
                   	 	 [name retain];
                   	 }
                   	 return self;
                   }

                   -(void)encodeWithCoder:(NSCoder *)coder {
                   	 [coder encodeObject:name forKey:@"name"];
                   }

                   @end


Tuesday, August 10, 2010
@required                and @optional
                    • Protocols methods are required by default
                    • Can be relaxed with @optional directive
                           @protocol SomeProtocol

                           - (void)requiredMethod;

                           @optional
                           - (void)anOptionalMethod;
                           - (void)anotherOptionalMethod;

                           @required
                           - (void)anotherRequiredMethod;

                           @end

Tuesday, August 10, 2010
Categories & Extensions




Tuesday, August 10, 2010
Categories
                 Extending Object Features
                  • Add new methods to existing classes
                           •   Alternative to subclassing
                           •   Defines new methods and can override existing
                           •   Does not define new instance variables
                           •   Becomes part of the class definition
                               • Inherited by subclasses
                    • Can be used as organizational tool
                    • Often used in defining "private" methods


Tuesday, August 10, 2010
Using Categories
                 Interface
                 @interface NSString (Extensions)
                 -(NSString *)trim;
                 @end

                 Implementation
                 @implementation NSString (Extensions)
                 -(NSString *)trim {
                    NSCharacterSet *charSet =
                       [NSCharacterSet whitespaceAndNewlineCharacterSet];
                 	 return [self stringByTrimmingCharactersInSet:charSet];
                 }
                 @end

                 Usage
                 NSString *string = @"   A string to be trimmed    ";
                 NSLog(@"Trimmed string: '%@'", [string trim]);



Tuesday, August 10, 2010
Class Extensions
                 Unnamed Categories
                  • Objective-C 2.0 adds ability to define
                    "anonymous" categories
                           • Category is unnamed
                           • Treated as class interface continuations
                    • Useful for implementing required "private" API
                    • Compiler enforces methods are implemented




Tuesday, August 10, 2010
Class Extensions
                 Example
                 @interface Person : NSObject {
                 	 NSString *name;
                 }
                 -(NSString *)name;

                 @end




Tuesday, August 10, 2010
Class Extensions
                 Example
                 @interface Person ()
                 -(void)setName:(NSString *)newName;
                 @end

                 @implementation Person
                 - (NSString *)name {
                 	 return name;
                 }

                 - (void)setName:(NSString *)newName {
                 	 name = newName;
                 }
                 @end
Tuesday, August 10, 2010
Summary




Tuesday, August 10, 2010
Objective-C
                 Summary
                  • Fully C, Fully Object-Oriented
                  • Powerful dynamic runtime
                  • Objective-C 2.0 added many useful new
                    features
                           • Garbage Collection for Mac OS X apps
                           • Properties, Improved Categories & Protocols
                    • Objective-C 2.1 continues its evolution:
                           • Blocks (Closures)
                           • Synthesize by default for properties

Tuesday, August 10, 2010
Questions?




Tuesday, August 10, 2010

More Related Content

KEY
Objective-C Crash Course for Web Developers
Joris Verbogt
 
KEY
Parte II Objective C
Paolo Quadrani
 
PPTX
Java script
Adrian Caetano
 
PPTX
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Domenic Denicola
 
PPTX
Awesomeness of JavaScript…almost
Quinton Sheppard
 
KEY
Javascript tid-bits
David Atchley
 
KEY
JavaScript Neednt Hurt - JavaBin talk
Thomas Kjeldahl Nilsson
 
PDF
JavaScript and the AST
Jarrod Overson
 
Objective-C Crash Course for Web Developers
Joris Verbogt
 
Parte II Objective C
Paolo Quadrani
 
Java script
Adrian Caetano
 
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Domenic Denicola
 
Awesomeness of JavaScript…almost
Quinton Sheppard
 
Javascript tid-bits
David Atchley
 
JavaScript Neednt Hurt - JavaBin talk
Thomas Kjeldahl Nilsson
 
JavaScript and the AST
Jarrod Overson
 

What's hot (20)

PPTX
Advanced JavaScript
Nascenia IT
 
PPTX
5 Tips for Better JavaScript
Todd Anglin
 
PDF
Rust ⇋ JavaScript
Ingvar Stepanyan
 
PDF
Core concepts-javascript
Prajwala Manchikatla
 
KEY
みゆっき☆Think#7 「本気で学ぶJavascript」
techtalkdwango
 
PDF
JavaScript Basics and Best Practices - CC FE & UX
JWORKS powered by Ordina
 
PDF
Ten useful JavaScript tips & best practices
Ankit Rastogi
 
PDF
ES2015 workflows
Jarrod Overson
 
PPTX
Oojs 1.1
Rodica Dada
 
PPTX
Learn JS concepts by implementing jQuery
Wingify Engineering
 
PDF
Performance Optimization and JavaScript Best Practices
Doris Chen
 
PDF
Your code is not a string
Ingvar Stepanyan
 
ODP
Javascript
theacadian
 
PPT
Object Oriented JavaScript
Donald Sipe
 
PPT
Javascript and Jquery Best practices
Sultan Khan
 
PDF
Powerful JavaScript Tips and Best Practices
Dragos Ionita
 
PDF
Java Script Best Practices
Enrique Juan de Dios
 
PPTX
Building High Perf Web Apps - IE8 Firestarter
Mithun T. Dhar
 
PPT
Beginning Object-Oriented JavaScript
Stoyan Stefanov
 
PDF
Modernize your Objective-C
Massimo Oliviero
 
Advanced JavaScript
Nascenia IT
 
5 Tips for Better JavaScript
Todd Anglin
 
Rust ⇋ JavaScript
Ingvar Stepanyan
 
Core concepts-javascript
Prajwala Manchikatla
 
みゆっき☆Think#7 「本気で学ぶJavascript」
techtalkdwango
 
JavaScript Basics and Best Practices - CC FE & UX
JWORKS powered by Ordina
 
Ten useful JavaScript tips & best practices
Ankit Rastogi
 
ES2015 workflows
Jarrod Overson
 
Oojs 1.1
Rodica Dada
 
Learn JS concepts by implementing jQuery
Wingify Engineering
 
Performance Optimization and JavaScript Best Practices
Doris Chen
 
Your code is not a string
Ingvar Stepanyan
 
Javascript
theacadian
 
Object Oriented JavaScript
Donald Sipe
 
Javascript and Jquery Best practices
Sultan Khan
 
Powerful JavaScript Tips and Best Practices
Dragos Ionita
 
Java Script Best Practices
Enrique Juan de Dios
 
Building High Perf Web Apps - IE8 Firestarter
Mithun T. Dhar
 
Beginning Object-Oriented JavaScript
Stoyan Stefanov
 
Modernize your Objective-C
Massimo Oliviero
 
Ad

Viewers also liked (20)

PDF
Core Animation
Bob McCune
 
PDF
Drawing with Quartz on iOS
Bob McCune
 
PDF
Creating Container View Controllers
Bob McCune
 
PDF
Composing and Editing Media with AV Foundation
Bob McCune
 
PDF
Quartz 2D with Swift 3
Bob McCune
 
PDF
Master Video with AV Foundation
Bob McCune
 
PDF
Designing better user interfaces
Johan Ronsse
 
PDF
iOS design: a case study
Johan Ronsse
 
PDF
Starting Core Animation
John Wilker
 
PDF
Building Modern Audio Apps with AVAudioEngine
Bob McCune
 
PDF
iOS Developer Overview - DevWeek 2014
Paul Ardeleanu
 
PDF
Tuning Android Applications (Part One)
CommonsWare
 
PDF
Android performance tuning. Memory.
Sergii Kozyrev
 
PDF
Mastering Media with AV Foundation
Chris Adamson
 
PDF
Deep Parameters Tuning for Android Mobile Apps
Davide De Chiara
 
PDF
Objective-C for Java developers
Fábio Bernardo
 
PDF
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Haribabu Nandyal Padmanaban
 
PDF
Introduction to ART (Android Runtime)
Iordanis (Jordan) Giannakakis
 
KEY
Animation in iOS
Alexis Goldstein
 
PPTX
20 iOS developer interview questions
Arc & Codementor
 
Core Animation
Bob McCune
 
Drawing with Quartz on iOS
Bob McCune
 
Creating Container View Controllers
Bob McCune
 
Composing and Editing Media with AV Foundation
Bob McCune
 
Quartz 2D with Swift 3
Bob McCune
 
Master Video with AV Foundation
Bob McCune
 
Designing better user interfaces
Johan Ronsse
 
iOS design: a case study
Johan Ronsse
 
Starting Core Animation
John Wilker
 
Building Modern Audio Apps with AVAudioEngine
Bob McCune
 
iOS Developer Overview - DevWeek 2014
Paul Ardeleanu
 
Tuning Android Applications (Part One)
CommonsWare
 
Android performance tuning. Memory.
Sergii Kozyrev
 
Mastering Media with AV Foundation
Chris Adamson
 
Deep Parameters Tuning for Android Mobile Apps
Davide De Chiara
 
Objective-C for Java developers
Fábio Bernardo
 
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Haribabu Nandyal Padmanaban
 
Introduction to ART (Android Runtime)
Iordanis (Jordan) Giannakakis
 
Animation in iOS
Alexis Goldstein
 
20 iOS developer interview questions
Arc & Codementor
 
Ad

Similar to Objective-C for Java Developers (20)

PDF
Beginningi os part1-bobmccune
Mobile March
 
PDF
iPhone Programming in 30 minutes (?) [FTS]
Diego Pizzocaro
 
PDF
iOS Programming Intro
Lou Loizides
 
PDF
Louis Loizides iOS Programming Introduction
Lou Loizides
 
PDF
MFF UK - Introduction to iOS
Petr Dvorak
 
PDF
iOS overview
gupta25
 
ZIP
Day 1
Pat Zearfoss
 
PDF
FI MUNI 2012 - iOS Basics
Petr Dvorak
 
PDF
201005 accelerometer and core Location
Javier Gonzalez-Sanchez
 
KEY
iPhone Development Intro
Luis Azevedo
 
PDF
Iphone course 2
Janet Huang
 
PDF
Lecture 03
Nguyen Thanh Xuan
 
KEY
Mobile Development 101
Michael Galpin
 
PDF
iOS 2 - The practical Stuff
Petr Dvorak
 
PPTX
iOS Session-2
Hussain Behestee
 
KEY
Objective-C & iPhone for .NET Developers
Ben Scheirman
 
PDF
iPhone Seminar Part 2
NAILBITER
 
PDF
Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...
Yandex
 
PDF
오브젝트C(pdf)
sunwooindia
 
PPTX
Presentation 3rd
Connex
 
Beginningi os part1-bobmccune
Mobile March
 
iPhone Programming in 30 minutes (?) [FTS]
Diego Pizzocaro
 
iOS Programming Intro
Lou Loizides
 
Louis Loizides iOS Programming Introduction
Lou Loizides
 
MFF UK - Introduction to iOS
Petr Dvorak
 
iOS overview
gupta25
 
FI MUNI 2012 - iOS Basics
Petr Dvorak
 
201005 accelerometer and core Location
Javier Gonzalez-Sanchez
 
iPhone Development Intro
Luis Azevedo
 
Iphone course 2
Janet Huang
 
Lecture 03
Nguyen Thanh Xuan
 
Mobile Development 101
Michael Galpin
 
iOS 2 - The practical Stuff
Petr Dvorak
 
iOS Session-2
Hussain Behestee
 
Objective-C & iPhone for .NET Developers
Ben Scheirman
 
iPhone Seminar Part 2
NAILBITER
 
Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...
Yandex
 
오브젝트C(pdf)
sunwooindia
 
Presentation 3rd
Connex
 

Recently uploaded (20)

PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
PDF
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
PDF
A Day in the Life of Location Data - Turning Where into How.pdf
Precisely
 
PDF
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
PPTX
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
PDF
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
PDF
REPORT: Heating appliances market in Poland 2024
SPIUG
 
PDF
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PPTX
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
PDF
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
 
PDF
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
PPTX
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
PDF
Advances in Ultra High Voltage (UHV) Transmission and Distribution Systems.pdf
Nabajyoti Banik
 
PDF
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
PDF
The Evolution of KM Roles (Presented at Knowledge Summit Dublin 2025)
Enterprise Knowledge
 
PDF
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
A Day in the Life of Location Data - Turning Where into How.pdf
Precisely
 
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
REPORT: Heating appliances market in Poland 2024
SPIUG
 
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
 
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
Advances in Ultra High Voltage (UHV) Transmission and Distribution Systems.pdf
Nabajyoti Banik
 
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
The Evolution of KM Roles (Presented at Knowledge Summit Dublin 2025)
Enterprise Knowledge
 
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 

Objective-C for Java Developers

  • 1. Objective-C for Java Developers http://bobmccune.com Tuesday, August 10, 2010
  • 3. Objective-C The old new hotness • Strict superset of ANSI C • Object-oriented extensions • Additional syntax and types • Native Mac & iOS development language • Flexible typing • Simple, expressive syntax • Dynamic runtime Tuesday, August 10, 2010
  • 4. Why Use Objective-C? No Java love from Apple? • Key to developing for Mac & iOS platforms • Performance • Continually optimized runtime environment • Can optimize down to C as needed • Memory Management • Dynamic languages provide greater flexibility • Cocoa APIs rely heavily on these features Tuesday, August 10, 2010
  • 5. Java Developer’s Concerns Ugh, didn’t Java solve all of this stuff • Pointers • Memory Management • Preprocessing & Linking • No Namespaces • Prefixes used to avoid collisions • Common Prefixes: NS, UI, CA, MK, etc. Tuesday, August 10, 2010
  • 7. Classes • Classes define the blueprint for objects. • Objective-C class definitions are separated into an interface and an implementation. • Usually defined in separate .h and .m files •Defines the •Defines the actual programming implementation interface code •Defines the •Defines one or object's instance more initializers variable to properly initialize and object instance Tuesday, August 10, 2010
  • 8. Defining the class interface @interface BankAccount : NSObject { float accountBalance; NSString *accountNumber; } - (float)withDraw:(float)amount; - (void)deposit:(float)amount; @end Tuesday, August 10, 2010
  • 9. Defining the class interface @interface BankAccount : NSObject { float accountBalance; NSString *accountNumber; } - (float)withDraw:(float)amount; - (void)deposit:(float)amount; @end Tuesday, August 10, 2010
  • 10. Defining the class interface @interface BankAccount : NSObject { float accountBalance; NSString *accountNumber; } - (float)withDraw:(float)amount; - (void)deposit:(float)amount; @end Tuesday, August 10, 2010
  • 11. Defining the class interface @interface BankAccount : NSObject { float accountBalance; NSString *accountNumber; } - (float)withDraw:(float)amount; - (void)deposit:(float)amount; @end Tuesday, August 10, 2010
  • 12. Defining the class interface @interface BankAccount : NSObject { float accountBalance; NSString *accountNumber; } - (float)withDraw:(float)amount; - (void)deposit:(float)amount; @end Tuesday, August 10, 2010
  • 13. Defining the class interface @interface BankAccount : NSObject { float accountBalance; NSString *accountNumber; } - (float)withDraw:(float)amount; - (void)deposit:(float)amount; @end Tuesday, August 10, 2010
  • 14. Defining the class implementation #import "BankAccount.h" @implementation BankAccount - (id)init { self = [super init]; return self; } - (float)withdraw:(float)amount { // calculate valid withdrawal return amount; } - (void)deposit:(float)amount { // record transaction } @end Tuesday, August 10, 2010
  • 15. Defining the class implementation #import "BankAccount.h" @implementation BankAccount - (id)init { self = [super init]; return self; } - (float)withdraw:(float)amount { // calculate valid withdrawal return amount; } - (void)deposit:(float)amount { // record transaction } @end Tuesday, August 10, 2010
  • 16. Defining the class implementation #import "BankAccount.h" @implementation BankAccount - (id)init { self = [super init]; return self; } - (float)withdraw:(float)amount { // calculate valid withdrawal return amount; } - (void)deposit:(float)amount { // record transaction } @end Tuesday, August 10, 2010
  • 17. Defining the class implementation #import "BankAccount.h" @implementation BankAccount - (id)init { self = [super init]; return self; } - (float)withdraw:(float)amount { // calculate valid withdrawal return amount; } - (void)deposit:(float)amount { // record transaction } @end Tuesday, August 10, 2010
  • 18. Working with Objects Tuesday, August 10, 2010
  • 19. Creating Objects From blueprint to reality • No concept of constructors in Objective-C • Regular methods create new instances • Allocation and initialization are performed separately • Provides flexibility in where an object is allocated • Provides flexibility in how an object is initialized Java BankAccount account = new BankAccount(); Objective C BankAccount *account = [[BankAccount alloc] init]; Tuesday, August 10, 2010
  • 20. Creating Objects • NSObject defines class method called alloc • Dynamically allocates memory for object • Returns new instance of receiving class BankAccount *account = [BankAccount alloc]; • NSObject defines instance method init • Implemented by subclasses to initialize instance after memory for it has been allocated • Subclasses commonly define several initializers account = [account init]; • alloc and init calls are almost always nested into single line BankAccount *account = [[BankAccount alloc] init]; Tuesday, August 10, 2010
  • 21. Methods • Classes can define both class and instance methods • Methods are always public. • “Private” methods defined in implementation • Class methods (prefixed with +): • Define behaviors associated with class, not particular instance • No access to instance variables • Instance methods (prefixed with -) • Define behaviors specific to particular instance • Manage object state • Methods invoked by passing messages... Tuesday, August 10, 2010
  • 22. Messages Speaking to objects • Methods are invoked by passing messages • Done indirectly. We never directly invoke methods • Messages dynamically bound to method implementations at runtime • Dispatching handled by runtime environment • Simple messages take the form: • [object message]; • Can pass one or more arguments: • [object messageWithArg1:arg1 arg2:arg2]; Tuesday, August 10, 2010
  • 23. self and super • Methods have implicit reference to owning object called self (similar to Java’s this) • Additionally have access to superclass methods using super -(id)init { if (self = [super init]) { // do initialization } return self; } Tuesday, August 10, 2010
  • 24. Invoking methods in Java Map person = new HashMap(); person.put("name", "Joe Smith"); String address = "123 Street"; String house = address.substring(0, 3); person.put("houseNumber", house); List children = Arrays.asList("Sue", "Tom"); person.put("children", children); Tuesday, August 10, 2010
  • 25. Invoking methods in Objective-C NSMutableDictionary *person = [NSMutableDictionary dictionary]; [person setObject:@"Joe Smith" forKey:@"name"]; NSString *address = @"123 Street"; NSString *house = [address substringWithRange:NSMakeRange(0, 3)]; [person setObject:house forKey:@"houseNumber"]; NSArray *children = [NSArray arrayWithObjects:@"Sue", @"Tom", nil]; [person setObject:children forKey:@"children"]; Tuesday, August 10, 2010
  • 27. Memory Management Dude, where’s my Garbage Collection? • Garbage collection available for Mac apps (10.5+) • Use it if targeting 10.5+! • Use explicit memory management if targeting <= 10.4 • No garbage collection on iOS due to performance concerns. • Memory managed using simple reference counting mechanism: • Higher level abstraction than malloc / free • Straightforward approach, but must adhere to conventions and rules Tuesday, August 10, 2010
  • 28. Memory Management Reference Counting • Objective-C objects are reference counted • Objects start with reference count of 1 • Increased with retain • Decreased with release, autorelease • When count equals 0, runtime invokes dealloc 1 2 1 0 alloc retain release release Tuesday, August 10, 2010
  • 29. Memory Management Understanding the rules • Implicitly retain any object you create using: Methods starting with "alloc", "new", or contains "copy" e.g alloc, allocWithZone, newObject, mutableCopy,etc. • If you've retained it, you must release it • Many objects provide convenience methods that return an autoreleased reference. • Holding object reference from these methods does not make you the retainer • However, if you retain it you need an offsetting release or autorelease to free it Tuesday, August 10, 2010
  • 30. retain / release / autorelease @implementation BankAccount - (NSString *)accountNumber { return [[accountNumber retain] autorelease]; } - (void)setAccountNumber:(NSString *)newNumber { if (accountNumber != newNumber) { [accountNumber release]; accountNumber = [newNumber retain]; } } - (void)dealloc { [self setAccountNumber:nil]; [super dealloc]; } @end Tuesday, August 10, 2010
  • 32. Properties Simplifying Accessors • Object-C 2.0 introduced new syntax for defining accessor code • Much less verbose, less error prone • Highly configurable • Automatically generates accessor code • Compliments existing conventions and technologies • Key-Value Coding (KVC) • Key-Value Observing (KVO) • Cocoa Bindings • Core Data Tuesday, August 10, 2010
  • 33. Properties: Interface @property(attributes) type variable; Attribute Impacts readonly/readwrite Mutability assign/retain/copy Storage nonatomic Concurrency setter/getter API Tuesday, August 10, 2010
  • 34. Properties: Interface @property(attributes) type variable; Attribute Impacts readonly/readwrite Mutability assign/retain/copy Storage nonatomic Concurrency setter/getter API @property(readonly) NSString *acctNumber; Tuesday, August 10, 2010
  • 35. Properties: Interface @property(attributes) type variable; Attribute Impacts readonly/readwrite Mutability assign/retain/copy Storage nonatomic Concurrency setter/getter API @property(readwrite, copy) NSString *acctNumber; Tuesday, August 10, 2010
  • 36. Properties: Interface @property(attributes) type variable; Attribute Impacts readonly/readwrite Mutability assign/retain/copy Storage nonatomic Concurrency setter/getter API @property(nonatomic, retain) NSDate *activeOn; Tuesday, August 10, 2010
  • 37. Properties: Interface @property(attributes) type variable; Attribute Impacts readonly/readwrite Mutability assign/retain/copy Storage nonatomic Concurrency setter/getter API @property(readonly, getter=username) NSString *name; Tuesday, August 10, 2010
  • 38. Properties: Interface @interface BankAccount : NSObject { NSString *accountNumber; NSDecimalNumber *balance; NSDecimalNumber *fees; BOOL accountCurrent; } @property(readwrite, copy) NSString *accountNumber; @property(readwrite, retain) NSDecimalNumber *balance; @property(readonly) NSDecimalNumber *fees; @property(getter=isCurrent) BOOL accountCurrent; @end Tuesday, August 10, 2010
  • 39. Properties: Interface New in 10.6 @interface BankAccount : NSObject { and iOS 4 // Look ma, no more ivars } @property(readwrite, copy) NSString *accountNumber; @property(readwrite, retain) NSDecimalNumber *balance; @property(readonly) NSDecimalNumber *fees; @property(getter=isCurrent) BOOL accountCurrent; @end Tuesday, August 10, 2010
  • 40. Properties: Implementation @implementation BankAccount @synthesize accountNumber; @synthesize balance; @synthesize fees; @synthesize accountCurrent; ... @end Tuesday, August 10, 2010
  • 41. Properties: Implementation @implementation BankAccount New in 10.6 and iOS 4 // no more @synthesize statements ... @end Tuesday, August 10, 2010
  • 42. Accessing Properties • Generated properties are standard methods • Accessed through normal messaging syntax [object property]; [object setProperty:(id)newValue]; • Objective-C 2.0 property access via dot syntax object.property; object.property = newValue; Dot notation is just syntactic sugar. Still uses accessor methods. Doesn't get/set values directly. Tuesday, August 10, 2010
  • 44. Protocols Java’s Interface done Objective-C style • List of method declarations • Not associated with a particular class • Conformance, not class, is important • Useful in defining: • Methods that others are expected to implement • Declaring an interface while hiding its particular class • Capturing similarities among classes that aren't hierarchically related Tuesday, August 10, 2010
  • 45. Protocols NSCoding NSObject NSCoding Person Account CheckingAccount SavingAccount Tuesday, August 10, 2010
  • 46. Defining a Protocol NSCoding from Foundation Framework Objective-C equivalent to java.io.Externalizable @protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; - (id)initWithCoder:(NSCoder *)aDecoder; @end Tuesday, August 10, 2010
  • 47. Adopting a Protocol @interface Person : NSObject <NSCoding> { NSString *name; NSString *street; NSString *city, *state, *zip; } // method declarations @end Tuesday, August 10, 2010
  • 48. Conforming to a Protocol Partial implementation of conforming Person class @implementation Person -(id)initWithCoder:(NSCoder *)coder { if (self = [super init]) { name = [coder decodeObjectForKey:@"name"]; [name retain]; } return self; } -(void)encodeWithCoder:(NSCoder *)coder { [coder encodeObject:name forKey:@"name"]; } @end Tuesday, August 10, 2010
  • 49. @required and @optional • Protocols methods are required by default • Can be relaxed with @optional directive @protocol SomeProtocol - (void)requiredMethod; @optional - (void)anOptionalMethod; - (void)anotherOptionalMethod; @required - (void)anotherRequiredMethod; @end Tuesday, August 10, 2010
  • 51. Categories Extending Object Features • Add new methods to existing classes • Alternative to subclassing • Defines new methods and can override existing • Does not define new instance variables • Becomes part of the class definition • Inherited by subclasses • Can be used as organizational tool • Often used in defining "private" methods Tuesday, August 10, 2010
  • 52. Using Categories Interface @interface NSString (Extensions) -(NSString *)trim; @end Implementation @implementation NSString (Extensions) -(NSString *)trim { NSCharacterSet *charSet = [NSCharacterSet whitespaceAndNewlineCharacterSet]; return [self stringByTrimmingCharactersInSet:charSet]; } @end Usage NSString *string = @" A string to be trimmed "; NSLog(@"Trimmed string: '%@'", [string trim]); Tuesday, August 10, 2010
  • 53. Class Extensions Unnamed Categories • Objective-C 2.0 adds ability to define "anonymous" categories • Category is unnamed • Treated as class interface continuations • Useful for implementing required "private" API • Compiler enforces methods are implemented Tuesday, August 10, 2010
  • 54. Class Extensions Example @interface Person : NSObject { NSString *name; } -(NSString *)name; @end Tuesday, August 10, 2010
  • 55. Class Extensions Example @interface Person () -(void)setName:(NSString *)newName; @end @implementation Person - (NSString *)name { return name; } - (void)setName:(NSString *)newName { name = newName; } @end Tuesday, August 10, 2010
  • 57. Objective-C Summary • Fully C, Fully Object-Oriented • Powerful dynamic runtime • Objective-C 2.0 added many useful new features • Garbage Collection for Mac OS X apps • Properties, Improved Categories & Protocols • Objective-C 2.1 continues its evolution: • Blocks (Closures) • Synthesize by default for properties Tuesday, August 10, 2010