SlideShare une entreprise Scribd logo
1  sur  62
Télécharger pour lire hors ligne
Objective-C
                          A Beginner’s Dive




Saturday, March 9, 13
I Assume

                        • A Background in Java or C++
                        • An understanding of OOP
                        • A basic understanding of C


Saturday, March 9, 13
What is Objective-C?

                        • Superset of C
                        • Smalltalk style Object-Oriented
                        • The Official Language for iOS and OS X


Saturday, March 9, 13
Cool!
                        But before we dive in...




Saturday, March 9, 13
Hello World!
                 //
                 //     main.m

                 #include <stdio.h>
                 #include <Foundation/Foundation.h>

                 int main(int argc, const char **argv)
                 {
                     NSString *message = @"Hello World!";

                        printf("%sn", [message cString]);

                        return 0;
                 }



Saturday, March 9, 13
Hello World!
                        •   Objective-C String Literal

                            •   @”Hello World!”          //
                                                         //   main.m

                        •   C Function                   #include <stdio.h>
                                                         #include <Foundation/Foundation.h>


                            •   printf()                 int main(int argc, const char **argv)
                                                         {
                                                             NSString *message = @"Hello World!";


                            •   main()                        printf("%sn", [message cString]);

                                                              return 0;

                        •
                                                         }
                            Objective-C message

                            •   [message cString]




Saturday, March 9, 13
Ok.
                        Now, on to the teaching!




Saturday, March 9, 13
Objective-C Features
                        • C Functions
                        • C Structs
                        • C Unions
                        • C Pointers
                        • C Arrays
                        • C Everything Else
Saturday, March 9, 13
Objective-C Features
                        • Objects       • Data and Collections
                        • Methods       • Object Literals
                        • Inheritance   • Object Subscripts
                        • Properties    • Forin loops
                        • Protocols     • Blocks and Closures
                        • Categories    • ARC
Saturday, March 9, 13
You Will Learn About

                        • Making and Using Objects
                        • Using Foundation Framework Data Types
                        • Automatic Reference Counting (ARC)


Saturday, March 9, 13
Writing Objects
                           A Quick Run-Through




Saturday, March 9, 13
Objects
                        •   Interface

                            •   like Java’s Interface, but every object has one

                            •   placed in the header file

                        •   Implementation

                            •   must fill minimum requirements of Interface

                            •   placed in the implementation file


Saturday, March 9, 13
Example Object
                 //                                  //
                 //     MyObject.m                   //     MyObject.h
                 //     Implementation               //     Interface

                 #import “MyObject.h”                #import <Foundation/Foundation.h>

                 @implementation MyObject            @interface MyObject : NSObject {
                                                         int _myInt;
                 // method implementations go here   }

                 @end                                // method declarations go here

                                                     @end




Saturday, March 9, 13
Objects (More Info)
                        • Objects have Instance Variables (ivars)
                        • No Class variables, use C static globals
                        • No enforced “public” and “private”
                        • Object Instances can be of type:
                         •id
                         •Class *
Saturday, March 9, 13
Object Methods

                        • Class Method or Instance Method
                        • Variables are “named” in the method’s
                          signature (fancy word for method name)
                        • Default return and variable type is id


Saturday, March 9, 13
Format of a Method

                        +/- (return type)methodName;



                        +/- (return type)methodWithVar:(var type)var;



                        +/- (return type)methodWithVar1:(var type)var1
                        ! ! ! ! ! ! ! !            var2:(var type)var2;




Saturday, March 9, 13
Method Examples
                 //                              //
                 //     MyObject.m               //     MyObject.h
                 //     Implementation           //     Interface

                 #import “MyObject.h”            #import <Foundation/Foundation.h>

                 @implementation MyObject        @interface MyObject : NSObject {
                                                     int _myInt;
                 // setter                       }
                 - (void)setMyInt:(int)myInt {
                     _myInt = myInt;             // setter
                 }                               - (void)setMyInt:(int)myInt;

                 // getter                       // getter
                 - (int)myInt {                  - (int)myInt;
                     return _myInt;
                 }                               @end

                 @end




Saturday, March 9, 13
Object Method Calling
                        • Not like C, C++, or Java
                        • Based on Smalltalk message passing
                        • The Square Brackets [] are your friend!
                          [object method];
                          [object methodWithVar:value];
                          [object methodWithVar1:val1
                          ! ! ! ! ! ! ! ! var2:val2];


Saturday, March 9, 13
Testing Responsiveness
                        to a Selector
                        •   The name of a method is its Selector
                            SEL mySelector = selector(myMethodWithParameter:)

                        •   Every object inherits respondsToSelector:
                            •   Takes the selector to test for
                            •   Returns YES when the object can respond to
                                that method
                            •   Returns NO when the object cannot respond to
                                that method


Saturday, March 9, 13
Object Constructor

                        • Not a special method (unlike Java)
                        • Just an instance method to set up the
                          Object’s Instance Variables
                        • Generally named init


Saturday, March 9, 13
Generic Constructor

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




Saturday, March 9, 13
Constructor Example
                   // default constructor
                 - (id)init {
                     // calls my custom constructor
                     return [self initWithInt:0];
                 }

                 // custom constructor
                 - (id)initWithInt:(int)myInt {
                     if (self = [super init]) {
                         _myInt = myInt;
                     }
                     return self;
                 }




Saturday, March 9, 13
Inheritance

                        • Single Inheritance from Objects
                        • Method Overloading Supported
                        • Superclass defined in the Interface
                        • Super class referenced with super

Saturday, March 9, 13
Inheritance Example
                 //                               //
                 //     MyObject.m                //     MyObject.h
                 //     Implementation            //     Interface

                 #import “MyObject.h”             #import <Foundation/Foundation.h>

                 @implementation MyObject         @interface MyObject : NSObject {
                                                      int _myInt;
                 - (id)init {                     }
                     if (self = [super init]) {
                         _myInt = 5;              - (id)init;
                     }
                     return self;                 @end
                 }

                 @end




Saturday, March 9, 13
Properties
                        • Syntactic sugar for variable, accessor, and
                          mutator declarations all-in-one
                        • Properties are declared in the Interface and
                          synthesized in the Implementation
                        • Let you use “dot syntax” with getters and
                          setters
                          !   myObjectInstance.myInt = 5;
                          !   int x = myObjectInstance.myInt;



Saturday, March 9, 13
Property Example
                 //                            //
                 //     NSString+Reverse.m     //     NSString+Reverse.h
                 //     Category               //     Category

                 #import "NSString.h"          #import <Foundation/Foundation.h>

                 @implementation MyObject      @interface MyObject : NSObject

                 // creates variable _myInt    @property (assign, nonatomic) int myInt;
                 // creates getter myInt
                 // creates setter setMyInt:   @end
                 @synthesize myInt = _myInt;

                 @end




Saturday, March 9, 13
More on Properties
                        •   Attributes
                            strong weak copy assign readonly
                            atomic nonatomic

                        •   	

                            @synthesize vs @dynamic
                            !synthesize variable = nameOfIvar;
                            @

                            •   Default ivar name for variable is
                                _variable

                        •   Custom getters and setters
                            getter = myGetter, setter = mySetter:


Saturday, March 9, 13
Protocols

                        • Like an Objective-C Interface
                        • Similar to Java Interfaces
                        • Can implement multiple Protocols
                        • Protocols can ‘inherit’ other Protocols

Saturday, March 9, 13
Example Protocol
                 //                                         //
                 //     MyProtocol.h                        //     MyObject.h
                 //     Protocol                            //     Interface

                 #import <Foundation/Foundation.h>          #import <Foundation/Foundation.h>
                                                            #import "MyProtocol.h"
                 @protocol MyProtocol <NSObject>
                                                            @interface MyObject : NSObject <MyProtocol>
                 @property (assign, nonatomic) int myInt;
                                                            @end
                 - (NSString *)stringMyInt;

                 @end




Saturday, March 9, 13
Categories
                        • The ability to add new methods to an
                          Object
                        • Changes apply to all instances of the object
                        • Overwrites any methods that already exist
                          in the class
                        • Cannot add Properties and ivars
                        • Can be dangerous
Saturday, March 9, 13
Example Category
                 //                                                     //
                 //     NSString+Reverse.m                              //     NSString+Reverse.h
                 //     Category                                        //     Category

                 #import "NSString+Reverse.h"                           #import <Foundation/Foundation.h>
                 #import <stdlib.h>
                                                                        @interface NSString (Reverse)
                 @implementation NSString (Reverse)
                                                                        - (NSString *)reverse;
                 - (NSString *)reverse {
                     int length = [self length];                        @end
                     char *newString =
                 ! !      calloc(length+1, sizeof(char));
                     int current = 0;

                        const char *cstr = [self cString];
                        for (int i=length-1; i >= 0; i--) {
                            newString[current] = cstr[i];
                            current++;
                        }

                         NSString *new =
                 !      !     [NSString stringWithCString:newString];
                         free(newString);

                        return new;
                 }

                 @end




Saturday, March 9, 13
Class Extension

                        • Like Categories, but with the ability to add
                          ivars and Properties
                        • Implementations of methods required in
                          the main Implementation block
                        • Can be used to declare “private” methods

Saturday, March 9, 13
Class Extension
                                  Example
                 //
                 //     MyObject.m

                 // Class Extension
                 @interface MyObject ()

                 @property (assign) int myPrivateInt;

                 @end

                 // Implementation
                 @implementation MyObject

                 @synthesize myPrivateInt = _myPrivateInt;

                 //     more implementation here

                 @end




Saturday, March 9, 13
Ok.
                        Now, lets take a look at MyObject




Saturday, March 9, 13
MyObject
                 //                                                      //
                 //     MyObject.m                                       //     MyObject.h

                 #import "MyObject.h"                                    #import <Foundation/Foundation.h>
                                                                         #import "MyProtocol.h"
                 @interface MyObject ()
                 @property (assign, nonatomic) int myPrivateInt;         @interface MyObject : NSObject <MyProtocol>
                 @end
                                                                         @property (assign, nonatomic) int myInt;
                 @implementation MyObject
                                                                         // default constructor
                 @synthesize myInt = _myInt;                             - (id)init;
                 @synthesize myPrivateInt = _myPrivateInt;
                                                                         // custom constructor
                 - (id)init {                                            - (id)initWithInt:(int)myInt;
                     return [self initWithInt:0];
                 }                                                       @end

                 - (id)initWithInt:(int)myInt {
                     if (self = [super init]) {
                         _myInt = myInt;
                 !   !     _myPrivateInt = 5;
                     }
                     return self;
                 }

                 - (NSString *)stringMyInt {
                     return [NSString stringWithFormat:@"%d", _myInt];
                 }

                 @end




Saturday, March 9, 13
Great
                        But how do I use it?




Saturday, March 9, 13
Using MyObject
                 MyObject *obj = [[MyObject alloc] init];
                 obj.myInt = 5;
                 NSLog(@"%in", obj.myInt);


                 MyObject *other = [MyObject alloc];
                 other = [other initWithInt:5];
                 [other setMyInt:10];
                 NSLog(@"%in", [obj myInt]);




Saturday, March 9, 13
Using MyObject
                        •   alloc class method


                        •   use of init and
                            initWithInt: methods         MyObject *obj = [[MyObject alloc] init];
                                                         obj.myInt = 5;

                        •
                                                         NSLog(@"%in", obj.myInt);
                            splitting up the alloc and
                            init method calls
                                                         MyObject *other = [MyObject alloc];
                                                         other = [other initWithInt:5];

                        •   use of dot syntax and        [other setMyInt:10];
                                                         NSLog(@"%in", [obj myInt]);
                            generated methods

                        •   NSLog() for printing
                            messages to the console



Saturday, March 9, 13
One More Thing
                        Imports and Forward Declarations




Saturday, March 9, 13
Imports
                        • Objective-C introduces the #import
                          Preprocessor Directive
                          #import "MyHeaderFile.h"
                          #import <SystemHeader.h>

                        • Guarantees the file is only included once
                        • Better Practice than C’s #include

Saturday, March 9, 13
Forward Declarations

                        • A Promise to the Compiler that a Class or
                          Protocol will exist at Compile Time

                          @class PromisedObject;

                          @protocol PromisedProtocol;

                        • Minimizes the amount of #includes

Saturday, March 9, 13
Objective-C Data
                        What you get with the Foundation Framework




Saturday, March 9, 13
nil

                        • Represents the absence of an object
                        • Messages passed to nil return nil
                        • nil is for objects, NULL is for C pointers


Saturday, March 9, 13
YES and NO

                        • Boolean type BOOL for “true” and “false”
                        • Use BOOL with YES and NO
                        • Dont use _Bool or bool with true and
                          false from stdbool.h




Saturday, March 9, 13
NSNumber

                 • Object Representation for Integers,
                        Booleans, Floats, Doubles, Characters, etc.
                 • Object Literal Syntax
                        @1   @1.0    @YES   @NO    @(1+2)   @'a'




Saturday, March 9, 13
NSString

                 • Immutable string
                 • NSMutableString for mutable strings
                 • Object Literal Syntax
                        @"Hello World!"   @("Hello World!")




Saturday, March 9, 13
NSArray
                 • Immutable object array
                 • NSMutableArray for mutable arrays
                 • Object Literal Syntax
                        @[object1, object2, ..., objectN];

                 • Object Subscripting Syntax
                        array[0] = object;
                        id object = array[0];




Saturday, March 9, 13
NSDictionary
                 • Immutable object dictionary
                 • NSMutableDictionary for mutable
                 • Object Literal Syntax
                        @{key1:value1, key2:value2, ...};

                 • Object Subscripting Syntax
                        dictionary[key] = object;
                        id object = dictionary[key];




Saturday, March 9, 13
Implementing
                            Array Subscripting
                        • Accessing Objects
                          objectAtIndexedSubscript:

                        • Setting Objects
                          setObject:atIndexedSubscript:

                        • The index subscript must be an integral

Saturday, March 9, 13
Implementing
                   Dictionary Subscripting

                        • Accessing Object values with key Objects
                          objectForKeyedSubscript:

                        • Setting Object values with key Objects
                          setObject:forKeyedSubscript:




Saturday, March 9, 13
Forin Loops
                        • Loop over the contents of a collection
                        • Foundation NSDictionary
                          NSArray
                                     Framework collections


                        • Any implementation of the
                          NSFastEnumeration Protocol

                        • Any Subclass of NSEnumerator

Saturday, March 9, 13
Forin Loops Example

                 NSArray *array = @[@1, @2, @3, @4, @5];

                 for (NSNumber *num in array) {
                     NSLog(@"%@", num);
                 }

                 for (id num in [array reverseObjectEnumerator]) {
                     NSLog(@"%@", num);
                 }




Saturday, March 9, 13
Objective-C Blocks

                        • Functions you can declare within functions
                        • Can close-over variables for later use
                        • Can pass block functions around like data


Saturday, March 9, 13
Block Syntax
                 • Similar to C Function Pointer Syntax
                        return_type (^name)(parameter types) =
                        ! ^(parameter list) {
                        ! ! // do stuff
                        ! };

                        return_type (^name)() = ^{
                        ! ! // do stuff
                        ! ! // takes no parameters
                        ! };



Saturday, March 9, 13
Block Example
                 int multiplier = 5;              The block itself has read
                 int (^mult)(int) = ^(int num){
                     return num * multiplier;     access to variables defined
                 };                               in the lexical scope at the
                 int num = mult(5); // num = 25   creation of the block.



                 __block int number = 0;          The block can close over
                 void (^increment)() = ^{
                     number++;                    outside variables and
                 };                               modify their values by
                 increment(); // number = 1       declaring the variable with
                 increment(); // number = 2       the __block modifier.



Saturday, March 9, 13
Type-Safe Enums
                        •   Enums that you can declare the type they enumerate over
                            •   int, char, unsigned char, NSUInteger, ...

                        •   Syntax similar to Object Subclassing
                            typedef enum MyEnum : NSUInteger {
                                A, B, C
                            } MyEnum;

                            enum MyUnsignedCharEnum : unsigned char {
                                FIRST, SECOND, THIRD
                            };

                            typedef enum MyUnsignedCharEnum MyUnsignedCharEnum;

                            typedef enum : NSUInteger {
                                ONE, TWO, THREE
                            } AnotherEnum;




Saturday, March 9, 13
Automatic Reference
                            Counting
                          What it is, and what it means to you




Saturday, March 9, 13
Referencing Counting
                        •   Nearly-Manual Memory Management

                        •   Objects have a counter showing how many
                            references are using them

                        •   Retain Objects when you receive them
                            [object retain];

                        •   Release Objects when you’re done using them
                            [object release];

                        •   Objects deallocate themselves when their retain
                            count reaches 0


Saturday, March 9, 13
Automatic Reference
                              Counting (ARC)
                        •   Almost Compile Time Garbage Collection

                        •   Retain and Release messages are added at compile
                            time by the compiler

                        •   ARC manages when to do this for you
                            •   strong variables are Retained when assigned

                            •   weak variables are not Retained on assignment
                                and are zeroed out when deallocated



Saturday, March 9, 13
Retain Cycle

                        • Two Objects Reference Each Other
                         • Their retain counts can never reach 0
                        • Set one of the references to weak to
                          prevent one of the objects from retaining
                          the other and causing a cycle



Saturday, March 9, 13
So there you have it
                            Objective-C thrown at you




Saturday, March 9, 13
Useful References
                        •   Programming with Objective-C
                            http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/
                            ProgrammingWithObjectiveC/Introduction/Introduction.html
                            http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/
                            ProgrammingWithObjectiveC/ProgrammingWithObjectiveC.pdf


                        •   Objective-C Cheat Sheet and Quick Reference
                            http://cdn5.raywenderlich.com/downloads/RW-Objective-C-Cheatsheet-v1_2.pdf


                        •   Coding Guidelines for Cocoa
                            http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/
                            CodingGuidelines.html
                            http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/
                            CodingGuidelines.pdf


                        •   Ry’s Objective-C Tutorial
                            http://rypress.com/tutorials/objective-c/index.html




Saturday, March 9, 13

Contenu connexe

Tendances

Louis Loizides iOS Programming Introduction
Louis Loizides iOS Programming IntroductionLouis Loizides iOS Programming Introduction
Louis Loizides iOS Programming IntroductionLou Loizides
 
Writing Ruby Extensions
Writing Ruby ExtensionsWriting Ruby Extensions
Writing Ruby ExtensionsMatt Todd
 
Basic Mechanism of OOPL
Basic Mechanism of OOPLBasic Mechanism of OOPL
Basic Mechanism of OOPLkwatch
 
PyFoursquare: Python Library for Foursquare
PyFoursquare: Python Library for FoursquarePyFoursquare: Python Library for Foursquare
PyFoursquare: Python Library for FoursquareMarcel Caraciolo
 
What lies beneath the beautiful code?
What lies beneath the beautiful code?What lies beneath the beautiful code?
What lies beneath the beautiful code?Niranjan Sarade
 
Java - A broad introduction
Java - A broad introductionJava - A broad introduction
Java - A broad introductionBirol Efe
 
Introduction to modern c++ principles(part 1)
Introduction to modern c++ principles(part 1)Introduction to modern c++ principles(part 1)
Introduction to modern c++ principles(part 1)Oky Firmansyah
 
Oop07 6
Oop07 6Oop07 6
Oop07 6schwaa
 
A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends旻琦 潘
 
Pd Kai#2 Object Model
Pd Kai#2 Object ModelPd Kai#2 Object Model
Pd Kai#2 Object Modelnagachika t
 
Objective-C & iPhone for .NET Developers
Objective-C & iPhone for .NET DevelopersObjective-C & iPhone for .NET Developers
Objective-C & iPhone for .NET DevelopersBen Scheirman
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing UpDavid Padbury
 
Ext JS 4.0 - Creating extensions, plugins and components
Ext JS 4.0 - Creating extensions, plugins and componentsExt JS 4.0 - Creating extensions, plugins and components
Ext JS 4.0 - Creating extensions, plugins and componentsPatrick Sheridan
 
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM LanguageCodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM LanguageCodeFest
 
Failure-Preventing Recommendations
Failure-Preventing RecommendationsFailure-Preventing Recommendations
Failure-Preventing RecommendationsAdrian Schroeter
 
Javascript Common Design Patterns
Javascript Common Design PatternsJavascript Common Design Patterns
Javascript Common Design PatternsPham Huy Tung
 

Tendances (20)

Louis Loizides iOS Programming Introduction
Louis Loizides iOS Programming IntroductionLouis Loizides iOS Programming Introduction
Louis Loizides iOS Programming Introduction
 
Writing Ruby Extensions
Writing Ruby ExtensionsWriting Ruby Extensions
Writing Ruby Extensions
 
Basic Mechanism of OOPL
Basic Mechanism of OOPLBasic Mechanism of OOPL
Basic Mechanism of OOPL
 
PyFoursquare: Python Library for Foursquare
PyFoursquare: Python Library for FoursquarePyFoursquare: Python Library for Foursquare
PyFoursquare: Python Library for Foursquare
 
What lies beneath the beautiful code?
What lies beneath the beautiful code?What lies beneath the beautiful code?
What lies beneath the beautiful code?
 
Java - A broad introduction
Java - A broad introductionJava - A broad introduction
Java - A broad introduction
 
Introduction to modern c++ principles(part 1)
Introduction to modern c++ principles(part 1)Introduction to modern c++ principles(part 1)
Introduction to modern c++ principles(part 1)
 
Oop07 6
Oop07 6Oop07 6
Oop07 6
 
A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends
 
Ruby Internals
Ruby InternalsRuby Internals
Ruby Internals
 
Pd Kai#2 Object Model
Pd Kai#2 Object ModelPd Kai#2 Object Model
Pd Kai#2 Object Model
 
Objective-C & iPhone for .NET Developers
Objective-C & iPhone for .NET DevelopersObjective-C & iPhone for .NET Developers
Objective-C & iPhone for .NET Developers
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing Up
 
JavaScript Patterns
JavaScript PatternsJavaScript Patterns
JavaScript Patterns
 
Ext JS 4.0 - Creating extensions, plugins and components
Ext JS 4.0 - Creating extensions, plugins and componentsExt JS 4.0 - Creating extensions, plugins and components
Ext JS 4.0 - Creating extensions, plugins and components
 
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM LanguageCodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
 
Failure-Preventing Recommendations
Failure-Preventing RecommendationsFailure-Preventing Recommendations
Failure-Preventing Recommendations
 
Javascript Common Design Patterns
Javascript Common Design PatternsJavascript Common Design Patterns
Javascript Common Design Patterns
 
Core concepts-javascript
Core concepts-javascriptCore concepts-javascript
Core concepts-javascript
 
Javascript tid-bits
Javascript tid-bitsJavascript tid-bits
Javascript tid-bits
 

En vedette

Introduction to objective c
Introduction to objective cIntroduction to objective c
Introduction to objective cSunny Shaikh
 
アイデアのつくり方(知財向けのTRIZワーク)2013年6月6日@宮城
アイデアのつくり方(知財向けのTRIZワーク)2013年6月6日@宮城アイデアのつくり方(知財向けのTRIZワーク)2013年6月6日@宮城
アイデアのつくり方(知財向けのTRIZワーク)2013年6月6日@宮城Rikie Ishii
 
Sctoyama(20141221)
Sctoyama(20141221)Sctoyama(20141221)
Sctoyama(20141221)真 岡本
 
SciREX「ナショナルイノベーションシステムに係る定量データとその分析手法」WSシリーズ第4回 サイエンスリンケージデータベースの使い方
SciREX「ナショナルイノベーションシステムに係る定量データとその分析手法」WSシリーズ第4回サイエンスリンケージデータベースの使い方SciREX「ナショナルイノベーションシステムに係る定量データとその分析手法」WSシリーズ第4回サイエンスリンケージデータベースの使い方
SciREX「ナショナルイノベーションシステムに係る定量データとその分析手法」WSシリーズ第4回 サイエンスリンケージデータベースの使い方Yasushi Hara
 
「データを使ってイノベーション分析をするためにデータベースの使い方をひと通り勉強してみる会(仮)」: 第一回
「データを使ってイノベーション分析をするためにデータベースの使い方をひと通り勉強してみる会(仮)」: 第一回「データを使ってイノベーション分析をするためにデータベースの使い方をひと通り勉強してみる会(仮)」: 第一回
「データを使ってイノベーション分析をするためにデータベースの使い方をひと通り勉強してみる会(仮)」: 第一回Yasushi Hara
 
Ibusuki(20140106)
Ibusuki(20140106)Ibusuki(20140106)
Ibusuki(20140106)真 岡本
 
カオス・まびき法(テーマ設定法の一形態)
カオス・まびき法(テーマ設定法の一形態)カオス・まびき法(テーマ設定法の一形態)
カオス・まびき法(テーマ設定法の一形態)Rikie Ishii
 
Nutanixを導入してみて思ったこと(仮)
Nutanixを導入してみて思ったこと(仮)Nutanixを導入してみて思ったこと(仮)
Nutanixを導入してみて思ったこと(仮)Kazuhito Ohkawa
 
Consulを頑張って理解する
Consulを頑張って理解するConsulを頑張って理解する
Consulを頑張って理解するMasakazu Watanabe
 

En vedette (12)

Introduction to objective c
Introduction to objective cIntroduction to objective c
Introduction to objective c
 
アイデアのつくり方(知財向けのTRIZワーク)2013年6月6日@宮城
アイデアのつくり方(知財向けのTRIZワーク)2013年6月6日@宮城アイデアのつくり方(知財向けのTRIZワーク)2013年6月6日@宮城
アイデアのつくり方(知財向けのTRIZワーク)2013年6月6日@宮城
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
Perl入学式 #1
Perl入学式 #1Perl入学式 #1
Perl入学式 #1
 
Sctoyama(20141221)
Sctoyama(20141221)Sctoyama(20141221)
Sctoyama(20141221)
 
SciREX「ナショナルイノベーションシステムに係る定量データとその分析手法」WSシリーズ第4回 サイエンスリンケージデータベースの使い方
SciREX「ナショナルイノベーションシステムに係る定量データとその分析手法」WSシリーズ第4回サイエンスリンケージデータベースの使い方SciREX「ナショナルイノベーションシステムに係る定量データとその分析手法」WSシリーズ第4回サイエンスリンケージデータベースの使い方
SciREX「ナショナルイノベーションシステムに係る定量データとその分析手法」WSシリーズ第4回 サイエンスリンケージデータベースの使い方
 
「データを使ってイノベーション分析をするためにデータベースの使い方をひと通り勉強してみる会(仮)」: 第一回
「データを使ってイノベーション分析をするためにデータベースの使い方をひと通り勉強してみる会(仮)」: 第一回「データを使ってイノベーション分析をするためにデータベースの使い方をひと通り勉強してみる会(仮)」: 第一回
「データを使ってイノベーション分析をするためにデータベースの使い方をひと通り勉強してみる会(仮)」: 第一回
 
Ibusuki(20140106)
Ibusuki(20140106)Ibusuki(20140106)
Ibusuki(20140106)
 
カオス・まびき法(テーマ設定法の一形態)
カオス・まびき法(テーマ設定法の一形態)カオス・まびき法(テーマ設定法の一形態)
カオス・まびき法(テーマ設定法の一形態)
 
DDoS対策の自動化
DDoS対策の自動化DDoS対策の自動化
DDoS対策の自動化
 
Nutanixを導入してみて思ったこと(仮)
Nutanixを導入してみて思ったこと(仮)Nutanixを導入してみて思ったこと(仮)
Nutanixを導入してみて思ったこと(仮)
 
Consulを頑張って理解する
Consulを頑張って理解するConsulを頑張って理解する
Consulを頑張って理解する
 

Similaire à Objective-C Beginner's Dive: A Quick Introduction

Sqlpo Presentation
Sqlpo PresentationSqlpo Presentation
Sqlpo Presentationsandook
 
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-CНикита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-CDataArt
 
Introduction to objective c
Introduction to objective cIntroduction to objective c
Introduction to objective csagaroceanic11
 
What Makes Objective C Dynamic?
What Makes Objective C Dynamic?What Makes Objective C Dynamic?
What Makes Objective C Dynamic?Kyle Oba
 
Blocks & GCD
Blocks & GCDBlocks & GCD
Blocks & GCDrsebbe
 
Blocks and GCD(Grand Central Dispatch)
Blocks and GCD(Grand Central Dispatch)Blocks and GCD(Grand Central Dispatch)
Blocks and GCD(Grand Central Dispatch)Jigar Maheshwari
 
Objective-C talk
Objective-C talkObjective-C talk
Objective-C talkbradringel
 
iPhone Seminar Part 2
iPhone Seminar Part 2iPhone Seminar Part 2
iPhone Seminar Part 2NAILBITER
 
MFF UK - Introduction to iOS
MFF UK - Introduction to iOSMFF UK - Introduction to iOS
MFF UK - Introduction to iOSPetr Dvorak
 
Introduction to MVC in iPhone Development
Introduction to MVC in iPhone DevelopmentIntroduction to MVC in iPhone Development
Introduction to MVC in iPhone DevelopmentVu Tran Lam
 
Cocoa for Web Developers
Cocoa for Web DevelopersCocoa for Web Developers
Cocoa for Web Developersgeorgebrock
 
Intro to iPhone Development
Intro to iPhone DevelopmentIntro to iPhone Development
Intro to iPhone DevelopmentMichael Koby
 
Objective-c for Java Developers
Objective-c for Java DevelopersObjective-c for Java Developers
Objective-c for Java DevelopersMuhammad Abdullah
 
Textual Modeling Framework Xtext
Textual Modeling Framework XtextTextual Modeling Framework Xtext
Textual Modeling Framework XtextSebastian Zarnekow
 

Similaire à Objective-C Beginner's Dive: A Quick Introduction (20)

Using SQLite
Using SQLiteUsing SQLite
Using SQLite
 
Iphone course 1
Iphone course 1Iphone course 1
Iphone course 1
 
Sqlpo Presentation
Sqlpo PresentationSqlpo Presentation
Sqlpo Presentation
 
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-CНикита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
 
Objective c
Objective cObjective c
Objective c
 
Introduction to objective c
Introduction to objective cIntroduction to objective c
Introduction to objective c
 
What Makes Objective C Dynamic?
What Makes Objective C Dynamic?What Makes Objective C Dynamic?
What Makes Objective C Dynamic?
 
Blocks & GCD
Blocks & GCDBlocks & GCD
Blocks & GCD
 
Perl-C/C++ Integration with Swig
Perl-C/C++ Integration with SwigPerl-C/C++ Integration with Swig
Perl-C/C++ Integration with Swig
 
iOS Basic
iOS BasiciOS Basic
iOS Basic
 
Blocks and GCD(Grand Central Dispatch)
Blocks and GCD(Grand Central Dispatch)Blocks and GCD(Grand Central Dispatch)
Blocks and GCD(Grand Central Dispatch)
 
Objective-C talk
Objective-C talkObjective-C talk
Objective-C talk
 
iPhone Seminar Part 2
iPhone Seminar Part 2iPhone Seminar Part 2
iPhone Seminar Part 2
 
MFF UK - Introduction to iOS
MFF UK - Introduction to iOSMFF UK - Introduction to iOS
MFF UK - Introduction to iOS
 
Introduction to MVC in iPhone Development
Introduction to MVC in iPhone DevelopmentIntroduction to MVC in iPhone Development
Introduction to MVC in iPhone Development
 
Cocoa for Web Developers
Cocoa for Web DevelopersCocoa for Web Developers
Cocoa for Web Developers
 
RubyMotion Introduction
RubyMotion IntroductionRubyMotion Introduction
RubyMotion Introduction
 
Intro to iPhone Development
Intro to iPhone DevelopmentIntro to iPhone Development
Intro to iPhone Development
 
Objective-c for Java Developers
Objective-c for Java DevelopersObjective-c for Java Developers
Objective-c for Java Developers
 
Textual Modeling Framework Xtext
Textual Modeling Framework XtextTextual Modeling Framework Xtext
Textual Modeling Framework Xtext
 

Objective-C Beginner's Dive: A Quick Introduction

  • 1. Objective-C A Beginner’s Dive Saturday, March 9, 13
  • 2. I Assume • A Background in Java or C++ • An understanding of OOP • A basic understanding of C Saturday, March 9, 13
  • 3. What is Objective-C? • Superset of C • Smalltalk style Object-Oriented • The Official Language for iOS and OS X Saturday, March 9, 13
  • 4. Cool! But before we dive in... Saturday, March 9, 13
  • 5. Hello World! // // main.m #include <stdio.h> #include <Foundation/Foundation.h> int main(int argc, const char **argv) { NSString *message = @"Hello World!"; printf("%sn", [message cString]); return 0; } Saturday, March 9, 13
  • 6. Hello World! • Objective-C String Literal • @”Hello World!” // // main.m • C Function #include <stdio.h> #include <Foundation/Foundation.h> • printf() int main(int argc, const char **argv) { NSString *message = @"Hello World!"; • main() printf("%sn", [message cString]); return 0; • } Objective-C message • [message cString] Saturday, March 9, 13
  • 7. Ok. Now, on to the teaching! Saturday, March 9, 13
  • 8. Objective-C Features • C Functions • C Structs • C Unions • C Pointers • C Arrays • C Everything Else Saturday, March 9, 13
  • 9. Objective-C Features • Objects • Data and Collections • Methods • Object Literals • Inheritance • Object Subscripts • Properties • Forin loops • Protocols • Blocks and Closures • Categories • ARC Saturday, March 9, 13
  • 10. You Will Learn About • Making and Using Objects • Using Foundation Framework Data Types • Automatic Reference Counting (ARC) Saturday, March 9, 13
  • 11. Writing Objects A Quick Run-Through Saturday, March 9, 13
  • 12. Objects • Interface • like Java’s Interface, but every object has one • placed in the header file • Implementation • must fill minimum requirements of Interface • placed in the implementation file Saturday, March 9, 13
  • 13. Example Object // // // MyObject.m // MyObject.h // Implementation // Interface #import “MyObject.h” #import <Foundation/Foundation.h> @implementation MyObject @interface MyObject : NSObject { int _myInt; // method implementations go here } @end // method declarations go here @end Saturday, March 9, 13
  • 14. Objects (More Info) • Objects have Instance Variables (ivars) • No Class variables, use C static globals • No enforced “public” and “private” • Object Instances can be of type: •id •Class * Saturday, March 9, 13
  • 15. Object Methods • Class Method or Instance Method • Variables are “named” in the method’s signature (fancy word for method name) • Default return and variable type is id Saturday, March 9, 13
  • 16. Format of a Method +/- (return type)methodName; +/- (return type)methodWithVar:(var type)var; +/- (return type)methodWithVar1:(var type)var1 ! ! ! ! ! ! ! ! var2:(var type)var2; Saturday, March 9, 13
  • 17. Method Examples // // // MyObject.m // MyObject.h // Implementation // Interface #import “MyObject.h” #import <Foundation/Foundation.h> @implementation MyObject @interface MyObject : NSObject { int _myInt; // setter } - (void)setMyInt:(int)myInt { _myInt = myInt; // setter } - (void)setMyInt:(int)myInt; // getter // getter - (int)myInt { - (int)myInt; return _myInt; } @end @end Saturday, March 9, 13
  • 18. Object Method Calling • Not like C, C++, or Java • Based on Smalltalk message passing • The Square Brackets [] are your friend! [object method]; [object methodWithVar:value]; [object methodWithVar1:val1 ! ! ! ! ! ! ! ! var2:val2]; Saturday, March 9, 13
  • 19. Testing Responsiveness to a Selector • The name of a method is its Selector SEL mySelector = selector(myMethodWithParameter:) • Every object inherits respondsToSelector: • Takes the selector to test for • Returns YES when the object can respond to that method • Returns NO when the object cannot respond to that method Saturday, March 9, 13
  • 20. Object Constructor • Not a special method (unlike Java) • Just an instance method to set up the Object’s Instance Variables • Generally named init Saturday, March 9, 13
  • 21. Generic Constructor - (id)init { if (self = [super init]) { // initialize variables } return self; } Saturday, March 9, 13
  • 22. Constructor Example // default constructor - (id)init { // calls my custom constructor return [self initWithInt:0]; } // custom constructor - (id)initWithInt:(int)myInt { if (self = [super init]) { _myInt = myInt; } return self; } Saturday, March 9, 13
  • 23. Inheritance • Single Inheritance from Objects • Method Overloading Supported • Superclass defined in the Interface • Super class referenced with super Saturday, March 9, 13
  • 24. Inheritance Example // // // MyObject.m // MyObject.h // Implementation // Interface #import “MyObject.h” #import <Foundation/Foundation.h> @implementation MyObject @interface MyObject : NSObject { int _myInt; - (id)init { } if (self = [super init]) { _myInt = 5; - (id)init; } return self; @end } @end Saturday, March 9, 13
  • 25. Properties • Syntactic sugar for variable, accessor, and mutator declarations all-in-one • Properties are declared in the Interface and synthesized in the Implementation • Let you use “dot syntax” with getters and setters ! myObjectInstance.myInt = 5; ! int x = myObjectInstance.myInt; Saturday, March 9, 13
  • 26. Property Example // // // NSString+Reverse.m // NSString+Reverse.h // Category // Category #import "NSString.h" #import <Foundation/Foundation.h> @implementation MyObject @interface MyObject : NSObject // creates variable _myInt @property (assign, nonatomic) int myInt; // creates getter myInt // creates setter setMyInt: @end @synthesize myInt = _myInt; @end Saturday, March 9, 13
  • 27. More on Properties • Attributes strong weak copy assign readonly atomic nonatomic • @synthesize vs @dynamic !synthesize variable = nameOfIvar; @ • Default ivar name for variable is _variable • Custom getters and setters getter = myGetter, setter = mySetter: Saturday, March 9, 13
  • 28. Protocols • Like an Objective-C Interface • Similar to Java Interfaces • Can implement multiple Protocols • Protocols can ‘inherit’ other Protocols Saturday, March 9, 13
  • 29. Example Protocol // // // MyProtocol.h // MyObject.h // Protocol // Interface #import <Foundation/Foundation.h> #import <Foundation/Foundation.h> #import "MyProtocol.h" @protocol MyProtocol <NSObject> @interface MyObject : NSObject <MyProtocol> @property (assign, nonatomic) int myInt; @end - (NSString *)stringMyInt; @end Saturday, March 9, 13
  • 30. Categories • The ability to add new methods to an Object • Changes apply to all instances of the object • Overwrites any methods that already exist in the class • Cannot add Properties and ivars • Can be dangerous Saturday, March 9, 13
  • 31. Example Category // // // NSString+Reverse.m // NSString+Reverse.h // Category // Category #import "NSString+Reverse.h" #import <Foundation/Foundation.h> #import <stdlib.h> @interface NSString (Reverse) @implementation NSString (Reverse) - (NSString *)reverse; - (NSString *)reverse { int length = [self length]; @end char *newString = ! ! calloc(length+1, sizeof(char)); int current = 0; const char *cstr = [self cString]; for (int i=length-1; i >= 0; i--) { newString[current] = cstr[i]; current++; } NSString *new = ! ! [NSString stringWithCString:newString]; free(newString); return new; } @end Saturday, March 9, 13
  • 32. Class Extension • Like Categories, but with the ability to add ivars and Properties • Implementations of methods required in the main Implementation block • Can be used to declare “private” methods Saturday, March 9, 13
  • 33. Class Extension Example // // MyObject.m // Class Extension @interface MyObject () @property (assign) int myPrivateInt; @end // Implementation @implementation MyObject @synthesize myPrivateInt = _myPrivateInt; // more implementation here @end Saturday, March 9, 13
  • 34. Ok. Now, lets take a look at MyObject Saturday, March 9, 13
  • 35. MyObject // // // MyObject.m // MyObject.h #import "MyObject.h" #import <Foundation/Foundation.h> #import "MyProtocol.h" @interface MyObject () @property (assign, nonatomic) int myPrivateInt; @interface MyObject : NSObject <MyProtocol> @end @property (assign, nonatomic) int myInt; @implementation MyObject // default constructor @synthesize myInt = _myInt; - (id)init; @synthesize myPrivateInt = _myPrivateInt; // custom constructor - (id)init { - (id)initWithInt:(int)myInt; return [self initWithInt:0]; } @end - (id)initWithInt:(int)myInt { if (self = [super init]) { _myInt = myInt; ! ! _myPrivateInt = 5; } return self; } - (NSString *)stringMyInt { return [NSString stringWithFormat:@"%d", _myInt]; } @end Saturday, March 9, 13
  • 36. Great But how do I use it? Saturday, March 9, 13
  • 37. Using MyObject MyObject *obj = [[MyObject alloc] init]; obj.myInt = 5; NSLog(@"%in", obj.myInt); MyObject *other = [MyObject alloc]; other = [other initWithInt:5]; [other setMyInt:10]; NSLog(@"%in", [obj myInt]); Saturday, March 9, 13
  • 38. Using MyObject • alloc class method • use of init and initWithInt: methods MyObject *obj = [[MyObject alloc] init]; obj.myInt = 5; • NSLog(@"%in", obj.myInt); splitting up the alloc and init method calls MyObject *other = [MyObject alloc]; other = [other initWithInt:5]; • use of dot syntax and [other setMyInt:10]; NSLog(@"%in", [obj myInt]); generated methods • NSLog() for printing messages to the console Saturday, March 9, 13
  • 39. One More Thing Imports and Forward Declarations Saturday, March 9, 13
  • 40. Imports • Objective-C introduces the #import Preprocessor Directive #import "MyHeaderFile.h" #import <SystemHeader.h> • Guarantees the file is only included once • Better Practice than C’s #include Saturday, March 9, 13
  • 41. Forward Declarations • A Promise to the Compiler that a Class or Protocol will exist at Compile Time @class PromisedObject; @protocol PromisedProtocol; • Minimizes the amount of #includes Saturday, March 9, 13
  • 42. Objective-C Data What you get with the Foundation Framework Saturday, March 9, 13
  • 43. nil • Represents the absence of an object • Messages passed to nil return nil • nil is for objects, NULL is for C pointers Saturday, March 9, 13
  • 44. YES and NO • Boolean type BOOL for “true” and “false” • Use BOOL with YES and NO • Dont use _Bool or bool with true and false from stdbool.h Saturday, March 9, 13
  • 45. NSNumber • Object Representation for Integers, Booleans, Floats, Doubles, Characters, etc. • Object Literal Syntax @1 @1.0 @YES @NO @(1+2) @'a' Saturday, March 9, 13
  • 46. NSString • Immutable string • NSMutableString for mutable strings • Object Literal Syntax @"Hello World!" @("Hello World!") Saturday, March 9, 13
  • 47. NSArray • Immutable object array • NSMutableArray for mutable arrays • Object Literal Syntax @[object1, object2, ..., objectN]; • Object Subscripting Syntax array[0] = object; id object = array[0]; Saturday, March 9, 13
  • 48. NSDictionary • Immutable object dictionary • NSMutableDictionary for mutable • Object Literal Syntax @{key1:value1, key2:value2, ...}; • Object Subscripting Syntax dictionary[key] = object; id object = dictionary[key]; Saturday, March 9, 13
  • 49. Implementing Array Subscripting • Accessing Objects objectAtIndexedSubscript: • Setting Objects setObject:atIndexedSubscript: • The index subscript must be an integral Saturday, March 9, 13
  • 50. Implementing Dictionary Subscripting • Accessing Object values with key Objects objectForKeyedSubscript: • Setting Object values with key Objects setObject:forKeyedSubscript: Saturday, March 9, 13
  • 51. Forin Loops • Loop over the contents of a collection • Foundation NSDictionary NSArray Framework collections • Any implementation of the NSFastEnumeration Protocol • Any Subclass of NSEnumerator Saturday, March 9, 13
  • 52. Forin Loops Example NSArray *array = @[@1, @2, @3, @4, @5]; for (NSNumber *num in array) { NSLog(@"%@", num); } for (id num in [array reverseObjectEnumerator]) { NSLog(@"%@", num); } Saturday, March 9, 13
  • 53. Objective-C Blocks • Functions you can declare within functions • Can close-over variables for later use • Can pass block functions around like data Saturday, March 9, 13
  • 54. Block Syntax • Similar to C Function Pointer Syntax return_type (^name)(parameter types) = ! ^(parameter list) { ! ! // do stuff ! }; return_type (^name)() = ^{ ! ! // do stuff ! ! // takes no parameters ! }; Saturday, March 9, 13
  • 55. Block Example int multiplier = 5; The block itself has read int (^mult)(int) = ^(int num){ return num * multiplier; access to variables defined }; in the lexical scope at the int num = mult(5); // num = 25 creation of the block. __block int number = 0; The block can close over void (^increment)() = ^{ number++; outside variables and }; modify their values by increment(); // number = 1 declaring the variable with increment(); // number = 2 the __block modifier. Saturday, March 9, 13
  • 56. Type-Safe Enums • Enums that you can declare the type they enumerate over • int, char, unsigned char, NSUInteger, ... • Syntax similar to Object Subclassing typedef enum MyEnum : NSUInteger { A, B, C } MyEnum; enum MyUnsignedCharEnum : unsigned char { FIRST, SECOND, THIRD }; typedef enum MyUnsignedCharEnum MyUnsignedCharEnum; typedef enum : NSUInteger { ONE, TWO, THREE } AnotherEnum; Saturday, March 9, 13
  • 57. Automatic Reference Counting What it is, and what it means to you Saturday, March 9, 13
  • 58. Referencing Counting • Nearly-Manual Memory Management • Objects have a counter showing how many references are using them • Retain Objects when you receive them [object retain]; • Release Objects when you’re done using them [object release]; • Objects deallocate themselves when their retain count reaches 0 Saturday, March 9, 13
  • 59. Automatic Reference Counting (ARC) • Almost Compile Time Garbage Collection • Retain and Release messages are added at compile time by the compiler • ARC manages when to do this for you • strong variables are Retained when assigned • weak variables are not Retained on assignment and are zeroed out when deallocated Saturday, March 9, 13
  • 60. Retain Cycle • Two Objects Reference Each Other • Their retain counts can never reach 0 • Set one of the references to weak to prevent one of the objects from retaining the other and causing a cycle Saturday, March 9, 13
  • 61. So there you have it Objective-C thrown at you Saturday, March 9, 13
  • 62. Useful References • Programming with Objective-C http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ ProgrammingWithObjectiveC/Introduction/Introduction.html http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ ProgrammingWithObjectiveC/ProgrammingWithObjectiveC.pdf • Objective-C Cheat Sheet and Quick Reference http://cdn5.raywenderlich.com/downloads/RW-Objective-C-Cheatsheet-v1_2.pdf • Coding Guidelines for Cocoa http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/ CodingGuidelines.html http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/ CodingGuidelines.pdf • Ry’s Objective-C Tutorial http://rypress.com/tutorials/objective-c/index.html Saturday, March 9, 13