Objective-C A Beginner's Dive
Upcoming SlideShare
Loading in...5
×
 

Objective-C A Beginner's Dive

on

  • 1,124 views

Objective-C is a Smalltalk-like Object-Oriented layer on top of the C language. It is the official language of OS X and iOS. Assuming you have a background in Object-Oriented Programming and a basic ...

Objective-C is a Smalltalk-like Object-Oriented layer on top of the C language. It is the official language of OS X and iOS. Assuming you have a background in Object-Oriented Programming and a basic understanding of the C language or syntax, this talk will cover everything you need to know about Objective-C. By the end of the talk, you will understand how to make and use your own objects, the Foundation Framework and the data structures it provides, and the Objective-C specific language constructs and syntactic-sugar.

Statistics

Views

Total Views
1,124
Views on SlideShare
1,123
Embed Views
1

Actions

Likes
1
Downloads
24
Comments
2

1 Embed 1

http://www.google.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • thanks every one to support this websites
    Are you sure you want to
    Your message goes here
    Processing…
  • it is very very nice to open this websites. i am happy also i am discussed with my friends
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Objective-C A Beginner's Dive Objective-C A Beginner's Dive Presentation Transcript

  • Objective-C A Beginner’s DiveSaturday, March 9, 13
  • I Assume • A Background in Java or C++ • An understanding of OOP • A basic understanding of CSaturday, March 9, 13
  • What is Objective-C? • Superset of C • Smalltalk style Object-Oriented • The Official Language for iOS and OS XSaturday, March 9, 13 View slide
  • Cool! But before we dive in...Saturday, March 9, 13 View slide
  • 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 ElseSaturday, March 9, 13
  • Objective-C Features • Objects • Data and Collections • Methods • Object Literals • Inheritance • Object Subscripts • Properties • Forin loops • Protocols • Blocks and Closures • Categories • ARCSaturday, 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-ThroughSaturday, 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 fileSaturday, 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 @endSaturday, 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 idSaturday, 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 @endSaturday, 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 methodSaturday, 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 initSaturday, 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 superSaturday, 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 } @endSaturday, 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; @endSaturday, 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 ProtocolsSaturday, 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; @endSaturday, 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 dangerousSaturday, 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; } @endSaturday, 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” methodsSaturday, 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 @endSaturday, March 9, 13
  • Ok. Now, lets take a look at MyObjectSaturday, 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]; } @endSaturday, 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 consoleSaturday, March 9, 13
  • One More Thing Imports and Forward DeclarationsSaturday, 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 #includeSaturday, 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 #includesSaturday, March 9, 13
  • Objective-C Data What you get with the Foundation FrameworkSaturday, March 9, 13
  • nil • Represents the absence of an object • Messages passed to nil return nil • nil is for objects, NULL is for C pointersSaturday, 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.hSaturday, March 9, 13
  • NSNumber • Object Representation for Integers, Booleans, Floats, Doubles, Characters, etc. • Object Literal Syntax @1 @1.0 @YES @NO @(1+2) @aSaturday, 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 integralSaturday, 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 NSEnumeratorSaturday, 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 dataSaturday, 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 youSaturday, 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 0Saturday, 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 deallocatedSaturday, 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 cycleSaturday, March 9, 13
  • So there you have it Objective-C thrown at youSaturday, 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.htmlSaturday, March 9, 13