Objective-C First Part adapted from a presentation by Kevin Layer.

29
Objective-C First Part adapted from a presentation by Kevin Layer

Transcript of Objective-C First Part adapted from a presentation by Kevin Layer.

Page 1: Objective-C First Part adapted from a presentation by Kevin Layer.

Objective-C

First Part adapted from a presentation by

Kevin Layer

Page 2: Objective-C First Part adapted from a presentation by Kevin Layer.

Main Points

A Bit of History Main Features Some Examples

Page 3: Objective-C First Part adapted from a presentation by Kevin Layer.

Overview

Objective-C is an object oriented language. follows ANSI C style coding with methods from

Smalltalk There is no formal written standard

– Relies mostly on libraries written by others Flexible almost everything is done at runtime.

– Dynamic Binding– Dynamic Typing– Dynamic Linking

Page 4: Objective-C First Part adapted from a presentation by Kevin Layer.

Inventors

Objective-C was invented by two men, Brad Cox and Tom Love.

Both were introduced to Smalltalk at ITT in 1981

Cox thought something like Smalltalk would be very useful to application developers

Cox modified a C compiler and by 1983 he had a working Object-oriented extension to C called OOPC.

Page 5: Objective-C First Part adapted from a presentation by Kevin Layer.

Development

Tom Love acquired a commercial copy of Smalltalk-80 while working for Schlumberger Research

With direct access Smalltalk, Love added more to OOPC making the final product, Objective-C.

In 1986 they release Objective-C through their company “Stepstone”

Page 6: Objective-C First Part adapted from a presentation by Kevin Layer.

NeXT and NeXTSTEP

In 1988 Steve Jobs acquires Objective-C license for NeXT

Used Objective-C to build the NeXTSTEP Operating System

Objective-C made interface design for NeXTSTEP much easier

NeXTSTEP was derived from BSD Unix In 1995 NeXT gets full rights to Objective-

C from Stepstone

Page 7: Objective-C First Part adapted from a presentation by Kevin Layer.

OPENSTEP API

Developed in 1993 by NeXT and Sun An effort to make NeXTSTEP-like

Objective-C implementation available to other platforms.

In order to be OS independent– Removed dependency on Mach Kernel– Made low-level data into classes

Paved the way for Mac OS X, GNUstep

Page 8: Objective-C First Part adapted from a presentation by Kevin Layer.

Apple and Mac OS X

NeXT is taken over by Apple in 1996 and put Steve Jobs and his Objective-C libraries to work

Redesigned Mac OS to use objective-C similar to that of NeXTSTEP

Developed a collection of libraries named “Cocoa” to aid GUI development

Release Mac OS X (ten), which was radically different than OS 9, in March 2001

Page 9: Objective-C First Part adapted from a presentation by Kevin Layer.

The Cocoa API

Primarily the most frequently used frameworks nowadays.

Developed by Apple from NeXTSTEP and OPENSTEP

Has a set of predefined classes and types such as NSnumber, NSstring, Nsdate, etc.

NS stands for NeXT-sun Includes a root class NSObject where words like

alloc, retain, and release come from

Page 10: Objective-C First Part adapted from a presentation by Kevin Layer.

Dynamic Language

Almost everything is done at runtime Uses dynamic typing, linking, and binding This allows for greater flexibility Minimizes RAM and CPU usage

Page 11: Objective-C First Part adapted from a presentation by Kevin Layer.

To Import or Include?

C/C++’s #include will insert head.h into the code even if its been added before.

Obj-C’s #import checks if head.h has been imported beforehand.

#import head.h

Page 12: Objective-C First Part adapted from a presentation by Kevin Layer.

Messages

Almost every object manipulation is done by sending objects a message

Two words within a set of brackets, the object identifier and the message to send.

Because of dynamic binding, the message and receiver are joined at runtime

[Identifier message ]

Page 13: Objective-C First Part adapted from a presentation by Kevin Layer.

Basic syntax structure

C++ syntax

Objective-C syntax

void function(int x, int y, char z);

Object.function(x, y, z);

-(void) function:(int)x, (int)y, (char)z;

[Object function:x, y, z];

Page 14: Objective-C First Part adapted from a presentation by Kevin Layer.

Keyword: id

The word ‘id’ indicates an identifier for an object much like a pointer in c++

This uses dynamic typing For example, if Pen is a class…

id myPen;

myPen = [Pen new ];

Page 15: Objective-C First Part adapted from a presentation by Kevin Layer.

Memory Allocation

Objects are created dynamically through the keyword, “alloc”

Objects are dynamically deallocated using the words “release” and “autorelease”

autorelease dealocates the object once it goes out of scope.

NOTE: None of these words are built-in

Page 16: Objective-C First Part adapted from a presentation by Kevin Layer.

Ownership

Objects are initially owned by the id that created them.

Like C++ pointers, multiple IDs can use the same object.

However, like in C++ if one ID releases the object, then any remaining pointers will be referencing invalid memory.

A method like “retain” can allow the object to stay if one ID releases it.

Page 17: Objective-C First Part adapted from a presentation by Kevin Layer.

Prototyping functions

When declaring or implementing functions for a class, they must begin with a + or -

+ indicates a “class method” that can only be used by the class itself. In other words, they’re for private functions.

- indicates “instance methods” to be used by the client program (public functions).

Page 18: Objective-C First Part adapted from a presentation by Kevin Layer.

Class Declaration (Interface)

#import <Cocoa/Cocoa.h>@interface Node : NSObject {

Node *link;int contents;

}+(id)new;-(void)setContent:(int)number;-(void)setLink:(Node*)next;-(int)getContent;-(Node*)getLink;@end

node.h

Page 19: Objective-C First Part adapted from a presentation by Kevin Layer.

Class Definition (Implementation)

#import "node.h”@implementation Node+(id)new

{ return [Node alloc];}-(void)setContent:(int)number

{contents = number;}-(void)setLink:(Node*)next {

[link autorelease];link = [next retain];

}-(int)getContent

{return contents;}-(Node*)getLink

{return link;}@end

node.m

Page 20: Objective-C First Part adapted from a presentation by Kevin Layer.

C++VS. Objective-C

Adds OOP, metaprogramming and generic programming to C

Comes with a std library Has numerous uses Large and complex code for OOP

Only adds OOP to C Has no standard library; is dependant on

other libraries Mostly used for application building Simpler way of handling classes and

objects

Page 21: Objective-C First Part adapted from a presentation by Kevin Layer.

Objective-C 2.0

In October 2007, Apple Inc. releases Objective-C 2.0 for Mac OS 10.5 (Leopard)

Adds automatic garbage collection Instance Methods (public functions) are

defined differently using @property

Page 22: Objective-C First Part adapted from a presentation by Kevin Layer.

linkList class

#import "linkList.h"@implementation linkList+(id)new {return [linkList alloc];}-(void)insert:(int)value { id temp = [Node new]; [temp setContent:value]; [temp setLink:head]; head = [temp retain]; [temp release];}

-(void)append:(int)value { id last = [head getLink]; while ([last getLink] != nil) {last = [last getLink];} id temp = [Node new]; [temp setContent:value]; [last setLink:temp]; [temp release];}-(void)remove { id temp = head; head = [head getLink]; [temp release];}-(int)getValue { return [head getContent];}@end

linkList.m

Page 23: Objective-C First Part adapted from a presentation by Kevin Layer.

Stack class

#import "linkList.h”@interface Stack : linkList{}+(id)new;-(void)push:(int)value;-(int)pop;@end

#import "stack.h”

@implementation Stack+(id)new {return [Stack alloc];}

-(void)push:(int)value {[self insert:value];}

-(int)pop { int ret = [self getValue]; [self remove]; return ret;}

@endstack.h stack.m

Page 24: Objective-C First Part adapted from a presentation by Kevin Layer.

Example: main.c

#import "stack.h”int main(){

Stack *s = [Stack new];[s push:1];[s push:2];printf("%d\t", [s pop]);[s push:3];printf("%d\t", [s pop]);printf("%d\t", [s pop]);[s release];return 0;

}

main.c

Page 25: Objective-C First Part adapted from a presentation by Kevin Layer.

Example 1

#import <Foundation/Foundation>

int main (int argc, const char * argv[]) {

NSString *testString;

testString = [[NSString alloc] init];

testString = @"Here's a test string in testString!";

NSLog(@"testString: %@", testString);

return 0;

}

Page 26: Objective-C First Part adapted from a presentation by Kevin Layer.

The Interface@interface SimpleCar : NSObject {

NSString* make;

NSString* model;

NSNumber* vin;

}

// set methods

- (void) setVin: (NSNumber*) newVin;

- (void) setMake: (NSString*) newMake;

- (void) setModel: (NSString*) setModel;

- (void) setMake: (NSString*) newMake

Model: (NSString*) newModel;

// get methods

- (NSString*) make;

- (NSString*) model;

- (NSNumber*) vin;

@end

Page 27: Objective-C First Part adapted from a presentation by Kevin Layer.

Implementation

@implementation SimpleCar // set methods

- (void) setVin: (NSNumber*) newVin {

[vin release];

vin = [[NSNumber alloc] init];

vin = newVin;

}

- (void) setMake: (NSString*) newMake {

[make release];

make = [[NSString alloc] initWithString:newMake];

}

- (void) setModel: (NSString*) newModel {

[model release];

model = [[NSString alloc] initWithString:newModel];

}

Page 28: Objective-C First Part adapted from a presentation by Kevin Layer.

Implementation Continued

- (void) setMake: (NSString*) newMake

Model: (NSString*) newModel {

// Reuse our methods from earlier

[self setMake:newMake];

[self setModel:newModel];

Page 29: Objective-C First Part adapted from a presentation by Kevin Layer.

Implementation continued …

// get methods - (NSString*) make {

return make;

}

- (NSString*) model {

return model;

}

- (NSNumber*) vin {

return vin;

}

@end