• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
iOS 101 - Xcode, Objective-C, iOS APIs

iOS 101 - Xcode, Objective-C, iOS APIs



Learn basics of Xcode, Objective-C syntax, Object allocation, message passing, category, core obj-c classes, how view-controllers work through some basic example apps.

Learn basics of Xcode, Objective-C syntax, Object allocation, message passing, category, core obj-c classes, how view-controllers work through some basic example apps.



Total Views
Views on SlideShare
Embed Views



0 Embeds 0

No embeds



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.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    iOS 101 - Xcode, Objective-C, iOS APIs iOS 101 - Xcode, Objective-C, iOS APIs Presentation Transcript

    • iOS Programming - 101 Xcode, Obj-C, iOS APIs Subhransu Behera @subhransu subh@subhb.org
    • Xcode
    • Development Tools IB is built-in in Xcode 4 Xcode IDE Interface Builder UI Design iOS Simulator Simulate Apps Instruments Monitor Performance
    • Xcode IDE • Editors // source editor & UI editor • Single window interface • Automatic error identification and correction • Assistance editing • Source control
    • Navigation area Editor area Debug area Utility area
    • Run on Simulator or Device Switch editors and views
    • Obj-C (Object Allocation)
    • Objective C • Strict super set of C • Provide Object Oriented Programming capability to C • Dynamic Runtime. • Message passing in stead of method calling • Can mix-in C & C++ codes with Objective C • Primary language used by Apple for Mac OSX and iOS application development.
    • Objective C Class #import <Foundation/Foundation.h> @interface Cat : NSObject { int numberOfEyes; float lengthOfMyCat; } NSString *name; NSString *breed; -(void)drinkMilk; -(void)makeACatDanceFor:(int)numberOfSeconds; @end
    • • Class declaration starts at @interface and ends at @end • Cat is the class name that is the name after @interface and before “:” • NSObject is the name of the super-class • numberOfEyes, lengthOfMyCat, name, breed are attributes of a Class object. • drinkMilk and makeACatDanceFor: are methods that a an object of Cat (class) can respond to.
    • Object Allocation Cat *myCat = [[Cat alloc] init]; // what exactly happens // 1st line allocates enough memory to hold a cat object Cat *myCat = [Cat alloc]; // 2nd line initializes the object. [myCat init];
    • Message Passing
    • Message Passing in Obj-C • In other languages you refer this as method calling. But due to the nature of Obj-C it’s often referred as a message (can refer it as method or function) being passed to an object to make it do something. • A message is passed to an object with-in square brackets. [objectName messageName]; • Messages can be piped together. That is a message can be passed to an object is the result of another message. [[objectName messageOne] messageTwo];
    • Message Passing Syntax The @implementation Sec ny arguments. In Chapter 7,“More on Classes,” you’ll see how methods that take than one argument are identified. method type return type method name Figure 3.1 method takes argument argument type argument name Declaring a method @implementation Section ed, the @implementation section contains the actual code for the methods you ed in the @interface section.You have to specify what type of data is to be store objects of this class.That is, you have to describe the data that members of the cl
    • Instance & Class Methods • Instance responds to instance methods (starts with -) -(id)init; -(void)sing; -(NSString *)description; • Class responds to class methods (starts with +) +(id)alloc; +(void)initEventWithEventName:(NSString *)eventName
    • Message Passing • [receiver message]; • [receiver message:argument]; • [receiver message:arg1 andArg:arg2];
    • Objective-C Properties
    • Declared Properties • Provides a getter and a setter method
    • Manual Declaration without Properties Refer to the SnailView.h and SnailView.m in SnailRun sample code #import <UIKit/UIKit.h> @interface SnailView : UIImageView { double animationInterval; NSString *snailName; } // manual declaration of methods -(NSString *)getSnailName; -(void)setSnailName:(NSString *)name; @end
    • Manual Implementation without Properties // manual getter method -(NSString *)getSnailName { return snailName; } // manual setter method -(void)setSnailName:(NSString *)name { if (![name isEqualToString:snailName]) { snailName = name; } }
    • Doing it using Properties @property (attributes) type name; Atomicity # atomic # nonatomic Writability, Ownership # readonly # strong, weak
    • Properties @property (nonatomic, strong) NSString *snailName; @property int animationInterval; @property int animationInterval;
    • Core Obj-C Classes
    • Obj-C Classes • • • • • NSNumber, NSInteger NSString, NSMutableString NSArray, NSMutableArray NSSet, NSMutableSet NSDictionary, NSMutableDictionary
    • object vs mutable object Mutable Object Object • • Readonly • However can be copied to another mutable object which can be modified. Original Object can not be modified • • Read-write Can add, update, delete original object
    • Strings • Have seen glimpse of it in all our NSLog messages • • NSLog(@"Objective C is Awesome"); NSString *snailName = [[NSString alloc] init];
    • Strings Methods [NSString stringWithFormat:@"%d", someInteger]; [NSString stringWithFormat:@"My integer %d", someInteger]; [snailName stringByReplacingOccurrencesOfString:@"N" withString:@"P"]; NSString *newString = [myString appendString:@"Another String"];
    • NSNumbers NSNumber *animationDuration = [[NSNumber alloc] init]; NSNumber *animationDuration = [[NSNumber alloc] initWithBool:YES]; NSNumber *animationDuration = [[NSNumber alloc] initWithInt:1];
    • NSNumbers // While creating NSNumbers NSNumber *myNumber; myNumber = @'Z'; myNumber = @YES; myNumber = @1; myNumber = @10.5; // While evaluating expressions NSNumber *myNewNumberAfterExpression = @(25 / 6);
    • NSArray & NSMutableArray NSArray (read-only) • • Manage collections of Objects • • NSMutableArray (read write) NSArray creates static array Objects can be anything NSString, NSNumber, NSDictionary, even NSArray itself. NSMutableArray creates dynamic array NSArray *myArray = [[NSArray alloc] init]; NSArray *myArray = [[NSArray alloc] initWithObjects:Obj1, Obj2, nil]; NSArray *myArray = @[Obj1, Obj2];
    • getting and setting values • Values are being accessed using array index • • myArray[2] // will return 3rd object. Index starts from 0 Value can be set by assigning an Object for an index • myArray[3] = @"some value"; // will set value for 4th element
    • insertion & deletion • – count: • • – containsObject: • • Insert a given object at end of the array – insertObject:atIndex: • • Tells if a given object is present or not – addObject: • • returns number of objects currently in the array Insert an object at specified index – removeAllObjects: • Empties the array of all its elements
    • Learn more about NSSet and NSDictionary
    • View Controllers
    • Key Objects in iOS Apps Model Data Model Objects Data Model Objects Data Model Objects View Controller UIApplication Application Delegate (custom object) UIWindow Root View Controller Event Loop Data Model Objects Data ModelController Additional Objects Objects (custom) Custom Objects System Objects Either system or custom objects Data Model Objects Data Model Objects Views and UI Objects
    • when app finishes launching - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ // window is being instantiated self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // view controller is being instantiated self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; // every app needs a window and a window needs a root view controller self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; }
    • what is this view controller • It is the controller part of M-V-C • Every view controller has a view • Your custom view controllers are sub-class of UIViewController class. • Provides view-management model for your apps. • • Adjust the contents of views • • Re-size views Acts on-behalf of views when users interacts! Has view-event methods that gets called when view appears and disappears!
    • View controller view events • – viewDidLoad: • • – viewDidUnload: • • When view is about to made visible – viewDidAppear: • • After view controller’s view is released or set to nil – viewWillAppear: • • Called after view has been loaded When view has been fully transitioned to screen – viewWillDisappear: and – viewDidDisappear: • The counter-part of above 2 methods.
    • Managing View Rotations • – shouldAutoRotate • • • Whether auto-rotation is supported or not Returns a boolean value YES/NO or TRUE/ FALSE – supportedInterfaceOrientations • • Returns interface orientation masks – didRotateFromInterfaceOrientation • Notifies when rotation happens
    • Sample Codes https://www.dropbox.com/s/wqcuusr9p2j913i/SampleCodes.zip • • • • • • HelloWorld - Combines two text from text field and display on a label SliderExample - Displays current value of a Slider Hashes - Displays the number of hashes and creates a geometric structue WeatherApp - Provides weather for a given day (hard coded values) SnailRun - Makes a snail move in a direction (try changing the direction value) MediaPlayer - Plays a local video file
    • To learn more ... • • Objective C - Read Stephen Kochan’s Book • • • Play with Obj-C and iOS lessons from Code School Go through “iOS UI Element Usage Guidelines” in iOS Human Interface Guidelines to learn more about the various UI components available and their usage Watch iOS Development Videos & WWDC Videos Join the community “iOS Dev Scout” facebook group.
    • Thanks Subhransu Behera @subhransu subh@subhb.org