overview of objective-c
DESCRIPTION
Overview of Objective-C. 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 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/1.jpg)
1
Overview of Objective-C
• 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 2: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/2.jpg)
2
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 3: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/3.jpg)
3
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 4: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/4.jpg)
4
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 5: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/5.jpg)
5
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 6: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/6.jpg)
6
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 7: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/7.jpg)
7
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 8: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/8.jpg)
8
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 9: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/9.jpg)
9
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 10: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/10.jpg)
10
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 11: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/11.jpg)
11
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 12: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/12.jpg)
12
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…
extern id Pen;
id myPen;
myPen = [Pen new ];
![Page 13: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/13.jpg)
13
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 14: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/14.jpg)
14
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 15: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/15.jpg)
15
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 16: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/16.jpg)
16
Class Declaration (Interface)
@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 17: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/17.jpg)
17
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 18: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/18.jpg)
18
C++ VS. Objective-C
• Adds OOP, meta programming 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 19: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/19.jpg)
19
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 20: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/20.jpg)
20
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 21: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/21.jpg)
21
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 22: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/22.jpg)
22
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;
}
$ gcc -x objective-c node.m linkList.m stack.m main.c -framework Cocoa -o stackTest
$./stackTest
2 3 1
main.c
![Page 23: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/23.jpg)
23
C and Objective-C Programming
![Page 24: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/24.jpg)
24
Why learn C?• Objective-C is based on C• Better control of low-level mechanisms• Performance better than Java• Java hides many details needed for writing
OS code But,….• Memory management responsibility• Explicit initialization and error detection• More room for mistakes
![Page 25: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/25.jpg)
25
Goals of this tutorial
• To introduce some basic C concepts to you– so that you can read further details on your own
• To warn you about common mistakes made by beginners– so that you get your homework done quickly
• You can write more complicated code
![Page 26: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/26.jpg)
26
Simple Example
#include <stdio.h>
void main(void){ printf(“Hello World. \n \t and you ! \n ”);
/* print out a message */ return;}
$Hello World.and you !
$
![Page 27: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/27.jpg)
27
Summarizing the Example
• #include <stdio.h> = include header file stdio.h– No semicolon at end – Small letters only – C is case-sensitive
• void main(void){ … } is the only code executed
• printf(“ /* message you want printed */ ”);
• \n = newline \t = tab
• Dessert: \ in front of other special characters within printf. – printf(“Have you heard of \”The Rock\” ? \n”);
![Page 28: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/28.jpg)
28
Simple Data Types• data-type # bytes(typical) values
short-hand• int 4 -2,147,483,648 to
2,147,483,647 %d• char 1 -128 to 127
%c• float 4 3.4E+/-38 (7 digits)
%f• double 8 1.7E+/-308 (15 digits long)
%lf• long 4 -2,147,483,648 to
2,147,483,647 %l• short 2 -32,768 to 32,767 • Lookup:
• signed / unsigned - int, char, long, short• long double
• ex: int num=20000;
printf(“Cornell has about %d students.\n”, num);
•
![Page 29: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/29.jpg)
29
#include <stdio.h>
void main(void){
int nstudents = 0; /* Initialization, required */
printf(“How many students does ITU have ?:”); scanf (“%d”, &nstudents); /* Read input */
printf(“ITU has %d students.\n”, nstudents);
return ;}
$How many students does ITU have ?: 20000 (enter)ITU has 20000 students.$
Example !
![Page 30: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/30.jpg)
30
Type conversion#include <stdio.h>void main(void){
int i,j = 12; /* i not initialized, only j */float f1,f2 = 1.2;
i = (int) f2; /* explicit: i <- 1, 0.2 lost */f1 = i; /* implicit: f1 <- 1.0 */
f1 = f2 + (int) j; /* explicit: f1 <- 1.2 + 12.0 */f1 = f2 + j; /* implicit: f1 <- 1.2 + 12.0 */
}
• Explicit conversion rules for arithmetic operation x=y+z;• convert y or z as
• double <- float <- int <- char, short
• then type cast it to x ’s type• Moral: stick with explicit conversions - no confusion !
![Page 31: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/31.jpg)
31
Like Java, like C• Operators same as Java:
• Arithmetic• int i = i+1; i++; i--; i *= 2;• +, -, *, /, %,
• Relational and Logical• <, >, <=, >=, ==, !=• &&, ||, &, |, !
• Syntax same as in Java:• if ( ) { } else { }• while ( ) { }• do { } while ( );• for(i=1; i <= 100; i++) { }• switch ( ) {case 1: … }• continue; break;
![Page 32: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/32.jpg)
32
Example
#include <stdio.h>#define DANGERLEVEL 5 /* C Preprocessor -
- substitution on appearance *//* like Java ‘final’ */
void main(void){
float level=1; /* if-then-else as in Java */
if (level <= DANGERLEVEL){ /*replaced by 5*/ printf(“Low on gas!\n”);
}else printf(“Good driver !\n”);
return;}
![Page 33: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/33.jpg)
33
One-Dimensional Arrays
#include <stdio.h>
void main(void) { int number[12]; /* 12 cells, one cell per student */ int index, sum = 0;
/* Always initialize array before use */ for (index = 0; index < 12; index++) {
number[index] = index; } /* now, number[index]=index; will cause error:why ?*/
for (index = 0; index < 12; index = index + 1) {sum += number[index]; /* sum array elements */
}
return;}
![Page 34: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/34.jpg)
34
More arrays
• Stringschar name[6];name = {‘C’,’S’,’4’,’1’,’4’,’\0’};
/* ’\0’= end of string */printf(“%s”, name); /* print until ‘\0’ */
– Functions to operate on strings• strcpy, strncpy, strcmp, strncmp, strcat, strncat, strstr,strchr
• #include <strings.h> at program start
• Multi-dimensional arraysint points[3][4];points [1][3] = 12; /* NOT points[3,4] */printf(“%d”, points[1][3]);
![Page 35: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/35.jpg)
35
Like Java, somewhat like C• Type conversions
– but you can typecast from any type to any type• c = (char) some_int;
– So be careful !
• Arrays– Always initialize before use– int number[12]; printf(“%d”, number[20]);
• produces undefined output, may terminate, may not even be detected.
• Strings are terminated by ’\0’ characterchar name[6] = {‘C’,’S’,’4’,’1’,’4’,’\0’};
/* ’\0’= end of string */printf(“%s”, name); /* print until ‘\0’ */
![Page 36: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/36.jpg)
36
Memory layout and addresses
5 10 12.5 9. 8 c d
int x = 5, y = 10;float f = 12.5, g = 9.8;char c = ‘c’, d = ‘d’;
4300 4304 4308 4312 4316 4317
![Page 37: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/37.jpg)
37
Pointers made easy - 1
• Pointer = variable containing address of another variable float f; /* data variable */
float *f_addr; /* pointer variable */
f_addr = &f; /* & = address operator */
? ?
f f_addr
4300 4304
?
any float
any address
? 4300
f f_addr
4300 4304
![Page 38: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/38.jpg)
38
Pointers made easy - 2 *f_addr = 3.2; /* indirection operator */
float g=*f_addr; /* indirection:g is now 3.2 */
f = 1.3;
f f_addr
4300 4304
3.2 4300
f f_addr
4300 4304
1.3 4300
![Page 39: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/39.jpg)
39
#include <stdio.h>
void main(void) {int j;int *ptr;
ptr=&j; /* initialize ptr before using it */ /* *ptr=4 does NOT initialize ptr */
*ptr=4; /* j <- 4 */
j=*ptr; /* j <- ??? */}
Pointer Example
![Page 40: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/40.jpg)
40
#include <stdio.h>
void main(void) {int *ptr;
/* allocate space to hold an int */ptr = malloc(sizeof(int));
/* do stuff with the space */*ptr=4;
free(ptr);/* free up the allocated space */
}
Dynamic Memory allocation• Explicit allocation and de-allocation
![Page 41: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/41.jpg)
41
Elementary file handling#include <stdio.h>
void main(void) { /* file handles */
FILE *input_file=NULL;
/* open files for writing*/ input_file = fopen(“cwork.dat”, “w”); if(input_file == NULL)
exit(1); /* need to do explicit ERROR CHECKING */
/* write some data into the file */ fprintf(input_file, “Hello there”);
/* don’t forget to close file handles */ fclose(input_file);
return;}
![Page 42: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/42.jpg)
42
Error Handling
• Moral from example: – unlike Java, no explicit exceptions– need to manually check for errors
• Whenever using a function you’ve not written
• Anywhere else errors might occur
![Page 43: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/43.jpg)
43
Functions - why and how ?
• If a program is too long
• Modularization – easier to • code• debug
• Code reuse
• Passing arguments to functions– By value
– By reference
• Returning values from functions– By value
– By reference
![Page 44: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/44.jpg)
44
Functions – basic example
#include <stdio.h>int sum(int a, int b);
/* function prototype at start of file */
void main(void){ int total = sum(4,5); /* call to the function */
printf(“The sum of 4 and 5 is %d”, total);}
int sum(int a, int b){ /* the function itself - arguments passed by value*/
return (a+b); /* return by value */}
![Page 45: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/45.jpg)
45
Arguments by reference
#include <stdio.h>int sum(int *pa, int *pb);
/* function prototype at start of file */
void main(void){ int a=4, b=5; int *ptr = &b; int total = sum(&a,ptr); /* call to the function */
printf(“The sum of 4 and 5 is %d”, total);}
int sum(int *pa, int *pb){ /* the function itself - arguments passed by reference */
return (*pa+*pb); /* return by value */}
![Page 46: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/46.jpg)
46
Why pointer arguments?!#include <stdio.h>
void swap(int, int);
main() { int num1 = 5, num2 = 10; swap(num1, num2); printf(“num1 = %d and num2 = %d\n”, num1, num2);}
void swap(int n1, int n2) { /* passed by value */ int temp;
temp = n1; n1 = n2; n2 = temp;}
![Page 47: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/47.jpg)
47
Why pointer arguments? This is why#include <stdio.h>
void swap(int *, int *);
main() { int num1 = 5, num2 = 10; swap(&num1, &num2); printf(“num1 = %d and num2 = %d\n”, num1, num2);}
void swap(int *n1, int *n2) { /* passed and returned by reference */
int temp;
temp = *n1; *n1 = *n2; *n2 = temp;}
![Page 48: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/48.jpg)
48
What’s wrong with this ?#include <stdio.h>
void dosomething(int *ptr);
main() {int *p;dosomething(p)printf(“%d”, *p); /* will this work ? */
}
void dosomething(int *ptr){ /* passed and returned by reference */
int temp=32+12;
ptr = &(temp);}
/* compiles correctly, but gives run-time error */
![Page 49: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/49.jpg)
49
Passing and returning arrays#include <stdio.h>
void init_array(int array[], int size) ;
void main(void) { int list[5];
init_array(list, 5); for (i = 0; i < 5; i++) printf(“next:%d”, array[i]);}
void init_array(int array[], int size) { /* why size ? */ /* arrays ALWAYS passed by reference */
int i; for (i = 0; i < size; i++) array[i] = 0; }
![Page 50: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/50.jpg)
50
Memory layout of programs
Header info
Code
Data - Heap
0
100
400
560
1010
1200
Dynamic memory
Local memory+ function callstack
all normal vars
all malloc()s
Data - stack
![Page 51: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/51.jpg)
51
Program with multiple files
• Library headers– Standard– User-defined
void myproc(void);int mydata;
#include <stdio.h>#include “mypgm.h”
void myproc(void){ mydata=2; . . . /* some code */}
#include <stdio.h>#include “mypgm.h”
void main(void){ myproc();}
hw.c mypgm.c
mypgm.h
![Page 52: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/52.jpg)
52
Externs#include <stdio.h>
extern char user2line [20]; /* global variable defined in another file */
char user1line[30]; /* global for this file */void dummy(void); void main(void) { char user1line[20]; /* different from earlier
user1line[30] */ . . . /* restricted to this func */}
void dummy(){ extern char user1line[]; /* the global user1line[30] */ . . .}
![Page 53: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/53.jpg)
53
#include <stdio.h>
struct birthday{ int month; int day; int year; };
main() { struct birthday mybday; /* - no ‘new’ needed ! */ /* then, it’s just like Java ! */ mybday.day=1; mybday.month=1; mybday.year=1977; printf(“I was born on %d/%d/%d”, birth.day, birth.month, birth.year);}
Structures• Equivalent of Java’s classes with only data
(no methods)
![Page 54: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/54.jpg)
54
More on Structuresstruct person{ char name[41]; int age; float height; struct { /* embedded structure */ int month; int day; int year; } birth; };
struct person me; me.birth.year=1977;………
struct person class[60]; /* array of info about everyone in class */
class[0].name=“Gun”; class[0].birth.year=1971;……
![Page 55: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/55.jpg)
55
Passing/Returning a structure
/* pass struct by value */void display_year_1(struct birthday mybday) { printf(“I was born in %d\n”, mybday.year);} /* - inefficient: why ? */. . . .
/* pass struct by reference */void display_year_2(struct birthday *pmybday) { printf(“I was born in %d\n”, pmybday->year);
/* warning ! ‘->’, not ‘.’, after a struct pointer*/ }. . . .
/* return struct by value */struct birthday get_bday(void){ struct birthday newbday; newbday.year=1971; /* ‘.’ after a struct */ return newbday;} /* - also inefficient: why ? */
![Page 56: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/56.jpg)
56
enum - enumerated data types#include <stdio.h>enum month{
JANUARY, /* like #define JANUARY 0 */FEBRUARY, /* like #define FEBRUARY 1 */MARCH /* … */
};
/* JANUARY is the same as month.JANUARY */
/* alternatively, …. */
enum month{JANUARY=1, /* like #define JANUARY 1 */FEBRUARY, /* like #define FEBRUARY 2 */MARCH /* … */
};
![Page 57: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/57.jpg)
57
typedef int Employees;
Employees my_company; /* same as int my_company; */
typedef struct person Person;
Person me; /* same as struct person me; */
typedef struct person *Personptr;
Personptr ptrtome; /* same as struct person *ptrtome;*/
Synonym for a data type
• Easier to remember
• Clean code
![Page 58: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/58.jpg)
58
int month[12]; /* month is a pointer to base address 430*/
month[3] = 7; /* month address + 3 * int elements => int at address (430+3*4) is now 7 */
ptr = month + 2; /* ptr points to month[2], => ptr is now (430+2 * int elements)= 438 */
ptr[5] = 12; /* ptr address + 5 int elements
=> int at address (434+5*4) is now 12.Thus, month[7] is now 12 */
ptr++; /* ptr <- 438 + 1 * size of int = 442 */(ptr + 4)[2] = 12; /* accessing ptr[6] i.e., array[9] */
More pointers
• Now , month[6], *(month+6), (month+4)[2], ptr[3], *(ptr+3) are all the same integer variable.
![Page 59: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/59.jpg)
59
2-D arrays
• 2-dimensional arrayint weekends[52][2];
weekends
• weekends[2][1] is same as *(weekends+2*2+1)– NOT *weekends+2*2+1 :this is an int !
[0][0] [0][1] [1][0] [1][1] [2][0] [2][1] [3][0] . . . .
![Page 60: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/60.jpg)
60
#include <stdio.h> /* program called with cmd line parameters */
void main(int argc, char *argv[]) { int ctr;
for (ctr = 0; ctr < argc; ctr = ctr + 1) { printf(“Argument #%d is -> |%s|\n”, ctr, argv[ctr]); } /* ex., argv[0] == the name of the program */}
Pointer Example - argc and argv parameters
![Page 61: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/61.jpg)
61
Strings#include <stdio.h>
main() { char msg[10]; /* array of 10 chars */ char *p; /* pointer to a char */ char msg2[]=“Hello”; /* msg2 = ‘H’’e’’l’’l’’o’’\0’ */
msg = “Bonjour”; /* ERROR. msg has a const address.*/ p = “Bonjour”; /* address of “Bonjour” goes into p */
msg = p; /* ERROR. Message has a constant address. */ /* cannot change it. */
p = msg; /* OK */ p[0] = ‘H’, p[1] = ‘i’,p[2]=‘\0’;
/* *p and msg are now “Hi” */}
![Page 62: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/62.jpg)
62
Pointer to function
• Advantage ? more flexibility
int func(); /*function returning integer*/ int *func(); /*function returning pointer to integer*/ int (*func)(); /*pointer to function returning integer*/ int *(*func)(); /*pointer to func returning ptr to int*/
![Page 63: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/63.jpg)
63
Pointer to function - Example#include <stdio.h>
void myproc (int d);void mycaller(void (* f)(int), int param);
void main(void) { myproc(10); /* call myproc with parameter 10*/mycaller(myproc, 10); /* and do the same again ! */
}
void mycaller(void (* f)(int), int param){(*f)(param); /* call function *f with param */
}
void myproc (int d){ . . . /* do something with d */}
![Page 64: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/64.jpg)
64
Doing more complicated things…
To declare an array of N pointers to functions returning pointers to functions returning pointers to characters
1. char *(*(*a[N])())();
2. Build the declaration up in stages, using typedefs: typedef char *pc; /* pointer to char */ typedef pc fpc(); /* function returning pointer to char */ typedef fpc *pfpc; /* pointer to above */ typedef pfpc fpfpc(); /* function returning... */ typedef fpfpc *pfpfpc; /* pointer to... */ pfpfpc a[N]; /* array of... */
![Page 65: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/65.jpg)
65
Before you go onto Objective-C
• Always initialize anything before using it (especially pointers)
• Don’t use pointers after freeing them• Don’t return a function’s local variables by reference• No exceptions – so check for errors everywhere• An array is also a pointer, but its value is immutable.
![Page 66: Overview of Objective-C](https://reader035.vdocument.in/reader035/viewer/2022062221/5681440f550346895db0ac96/html5/thumbnails/66.jpg)
66
References
• Cox, Brad. Object Oriented Programming: an Evolutioary Approach
• Sebesta, Robert. Concepts of Programming Languages
• Apple Inc. Apple Developer Connectionhttp://developer.apple.com
• Stevenson, Scott. Theocacaohttp://theocacao.com/document.page/510