iPhone Programming - University of Regina

Download Report

Transcript iPhone Programming - University of Regina

iPhone Programming
Version 2
Created by Nathan Magnus
Apple
• Your most useful resource is the
Apple developer documentation.
 http://developer.apple.com/
Xcode IDE
• Apple provides an IDE for creating iPhone
applications
• Xcode can also be used to create OSX
applications
Xcode IDE
• Installation
 Download from
http://developer.apple.com/iphone/index.action
• You will need to create an account if you do not
already have one
 Mount by clicking on it in the download
directory
 Double click on iPhone SDK
iPhone Simulator
• Simulates an iPhone.
• Can be rotated by 90° to the right or left
through the “Hardware” menu
• Supports multiple touches (option and
option-shift)
• Known bugs:
 Cannot be rotated upside down
 When rotated there is a small area that will not
respond to touches
An IPhone Application
•
Create an application that loads Google in
a UIWebView
–
The user enters a URL into the text field
and when they click enter on the keyboard
the UIWebView loads that address
Creating the Program
• Create a new View-Based application in
Xcode
– File -> New Project...
– Select “View-Based Application” and click
“Choose...”
– Name your project “webNav” and save
Program 1
• In the upper pane, double click on
webNavViewController.xib
– This will open the interface builder (IB)
Program 1
• Ensure the Library window is open (Tools-> Library)
Program 1
– Under Data View drag and drop a “Web
View” onto the main view
Program 1
Program 1
• Click on webNavViewController.h in Xcode
Program 1
• Add the following lines of code
– Under “@interface webNavViewController :
UIViewController {“
• Add “IBOutlet UIWebView *webView;”
– Under “}” before “@end”
• Add “@property (nonatomic, retain) UIWebView
*webView;”
Program 1
• Return to the Interface Builder
• Click on the WebView in the main View
Program 1
• Ensure that the Connections Inspector is
open (Tools -> Connections Inspector)
Program 1
• Click on the circle beside “New
Referencing Outlet” and drag to “File’s
Owner”
Program 1
• Select “webView” from the two options
Program 1
•
•
Save the Interface Builder
Double Click on webNavViewcontroller.m
Program 1
• Uncomment “-(void)viewDidLoad” function
Program 1
• Under [super viewDidLoad];
– Create a NSURL
• NSURL *url = [NSURL
URLWithString:@“http://www.google.ca”];
– The “@” makes the following string a NSString
– Create a NSURLRequest
• NSURLRequest *request = [NSURLRequest
requestwithURL:url];
– Load the request
• [webView loadRequest:request];
Program 1
Program 1
• This is what the
program should
look like
Information
• Files (.m files can be renamed to .mm to
allow Objective-C++):
 ProjectNameAppDelegate (.h and .m) - Creates
the window and view
 ProjectNameViewController (.h and .m) Controls user interaction with the view
• viewDidLoad is called when the initial view loads
Program 2
 Create an application that has a UITextField,
UILabel, UIButton and UIImageView
– Screen begins with an image of a your
handsome/beautiful instructor (or a hated celebrity), a
UITextField and a UIButton (with an appropriate title)
– The user enters a phrase into a UITextField. After they
are done editing they can click on a UIButton.
 If the phrase they entered matches a certain phrase then the
image changes to an explosion and a label appears telling the
user they just blew up the instructor.
 If the phrase does not match, a message telling them to try
again should be displayed.
Program 2
•
Steps:
1. Find an image of your handsome/beautiful instructor
or a hated celebrity and save it to “Documents”
2. Find an image of an explosion and save it to
“Documents”
3. Create a new View-Based Application (call it “Boom”
4. Create the Interface using IB
1.
2.
3.
Add a UILabel (found in Inputs & Values)
Add a UIImageView (found in Data Views)
Add a UITextField (found in Inputs & Values)
–
4.
Top half of screen due to onscreen keyboard
Add a UIButton (found in Inputs & Values)
Program 2
Program 2
• Click on the Attributes Inspector tab (or Tools->Attributes
Inspector)
Program 2
• Select the button and add the title “Check Input”
Program 2
• Navigate to your saved image using Finder
• Drag and drop your images into the
“Resources” group of the Xcode project
Program 2
• Select “Copy items into destination group’s folder (if
needed) and ensure other settings are all defaults then click
“Add”
Program 2
Program 2
• Click on the UIImageView in the IB and add your image in
the Attributes Inspector
Program 2
• Open the Connection Inspector
(Tools->Connections Inspector)
• Select each object on the interface builder
(UITextField, UIButton, UIImageView,
UILabel), drag to “File’s Owner” and select
the appropriate option
• For the UITextField, click on the circle
beside “delegate” and drag to “File’s
Owner”
Program 2
Program 2
• Add to BoomViewController.h
– After “@interface BoomViewController :
UIViewController {“
IBOutlet UILabel *label;
IBOutlet UITextField *input;
IBOutlet UIImageView *image;
IBOutlet UIButton *button;
Program 2
– After “}” before “@end”
@property (nonatomic, retain) UILabel *label;
@property (nonatomic, retain) UITextField *input;
@property (nonatomic, retain) UIImageView *image;
@property (nonatomic, retain) UIButton *button;
-(BOOL)textFieldShouldReturn:
(UITextField*)theTextField;
-(void)checkInput;
Program 2
Program 2
• In BoomViewController.m
– Uncomment the “–(void)viewDidLoad” method
– Add after “[super viewDidLoad];”
[label setText:@“Enter the detonation code.”];
[button addTarget:self action:@selector(checkInput)
forcontrolEvents:UIControlEventTouchUpInside];
Program 2
Program 2
– Add after the “–(void)viewDidLoad” function
-(BOOL)textFieldShouldReturn: (UITextField*)theTextField {
[theTextField resignFirstResponder];
return YES;
}
Program 2
Program 2
– Add after the “-(void)viewDidLoad” method
-(void)checkInput {
NSString *userInput = [input text];
if([userInput compare:@“Boom!”]= =NSOrderedSame)
{
[label setText:@“Your instructor went BOOM!”];
[image setImage:[UIImage imageNamed:@“explosion.jpg”]];
}
else
{
[label setText:[NSString stringWithCString:“That is not the correct
detonation code.”]];
[image setImage:[UIImage imageNamed:@“nathan.jpg”]];
}
}
Program 2
Program 2
• Finished Product:
Program 2
NSArray
• Used to hold objects in an array
• id is the default object type. All objects (NSUInteger,
NSString, etc) can be passed as an id
• Initializing:
 +(id)arrayWithObjects:(id)obj1, (id)obj2,…,nil - nil terminated
list of objects to be added to the array
• Accessing:
 -(id)objectAtIndex:(NSUInteger)index - return the id of the
object at the given index
• Functions also exist for sorting, comparing and
obtaining information about the array
Objective-C
•
Variables:
 Types include char, int, unsigned, float, double, BOOL
 Constants declared using “const” keyword
 declared by: type name;
Ex) float floatVal; char character;
• Conditional structures:
Comparison Operators
==
Equal
<=
Less or Equal
>=
Greater or Equal
case constant: code
break;
<
Less
default
break;
>
Greater
}
!=
Not Equal
 if(condition) { code }
 else if(condition) { code }
 else (condition) { code }
 switch (condition) {
Objective-C
•
Loops:
 do { code } while(condition);
 while(condition) { code }
•
•
 for(initialize; condition; increment) { code }
Arrays:
 Declaration:
• type name[sizeOfArray];
 Initialize:
• type name[] = {value1, value2
• name[0]=value1; name[1]=value2;
Pointers:
 Objects when using [Object method]; must be pointers or class name
 Initialize:
• type * name;
• nil/null - indicates no object at pointer but if used will not cause crash
Example of Objective-C
-(void)method
{
const unsigned loopAmt = 10;
printf("Testing: ");
for(unsigned i=0; i<loopAmt; i++)
printf("%i...", i);
//prints “Testing:0…1…2…3…4…5…6…7…8…9…
}
Exercise
 1) Create a web navigation application with
UITextField and UIWebView
• The user enters a URL into the text field and when
they click enter on the keyboard the UIWebView
loads that address
 2) Create a simple game of Tic Tac Toe
• Different status messages should be displayed on the
screen (most likely using a UILabel)
• When a game ends, nothing can be pushed except a
button that asks if the user would like to play again
Objective-C Classes

Interface declared by “@interface
ClassName:SuperClass” and ended by “@end”
SuperClass must always be “Object” or a subclass of
“Object” (NSObject for the iPhone)

Implementation declared by “@implementation
ClassName”
• All class methods are public
• Instance variables are private by default
• Classes can be extended with categories (no example
will be given)

Example of Classes
//tempClass inherits from NSObject
@interface tempClass : NSObject
{
@private
int var; //private instance variable
}
//function prototypes
+(int)staticMethod;
-(int)method;
@end //end of interface
Example of Classes
@implementation tempClass
+(int)staticMethod
{
var = 200;
return var;
}
-(int)method
{
var = 100; //assign a value to var
return var; //return value of var
}
@end
Objects
• Since every object must extend the NSObject class (or a
subclass of it) to create a new object call the “alloc”
method
 Ex) tempClass *tc = [tempClass alloc];
• If a method is static, it can be called without allocating the
object
 Ex) [tempClass staticMethod];
Objective-C++
• Syntax almost identical to Objective-C
• Allows the use of C++ libraries and
functions (ie: <iostream>, <fstream>)
• .h extension for header files and .mm
extension for implementation files
Example of Objective-C++
#include <iostream>
-(int)getInteger
{
return 5;
}
int aFunction(id this2)
{
/*print the value returned by the getInteger
function of the object passed to the method*/
cout << [this2 getInteger];
return 10;
}
Info.plst
• Info.plst file contains information about
your project
 Application icon (must be included as a
resource)
 Main nib file
NSString
• Full list of functions and properties can be found at:
“http://developer.apple.com/documentation/Cocoa/Reference/Foundati
on/Classes/NSString_Class/Reference/NSString.html”
• Creating:
 Add “@” in front of a regular string
ex) @“Hello World!”
 [NSString stringWithCString:“Hello World!”];
 Many other methods including from file and URL
• Methods:
 length, lowercaseString, uppercaseString, capitalizedString,
compare:(NSString*)aString
• NSOrderedAscending, NSOrderedSame,
NSOrderedDescending
Common Information
• hidden - whether the object is visible or not
Ex) label.hidden = NO;
• userInteractionEnabled - whether the object will respond to a
touch or not
Ex) label.userInteractionEnabled = YES;
• center - CGPoint representing the center of the object (CGPoint
is a struct with x and y fields)
Ex) cout << label.center.x;
UIButton
• Found in IB library under Inputs & Values
• Setters:
 setBackgroundImage:(UIImage*)
forState:(UIControlState)
 setImage:(UIImage*) forState:(UIControlState)
 setTitle:(NSString*) forState:(UIControlState)
• Properties:
 currentTitle, currentTitleColor, currentImage,
currentBackgroundImage, hidden
Ex) aButton.hidden = YES;
UIImageView
• Found in IB library under Data Views
• Initializers:
 initWithImage:(UIImage*)
• [UIImage
imageNamed:(NSString*)name] is useful
• Properties:
 image, userInteractionEnabled, hidden
UITextView
• Found in IB library under Data Views
• UITextAlignment - UITextAlignmentRight,
UITextAlignmentLeft, UITextAlignmentCenter.
• UIColor allows allows for creation of custom
colors as well as presets such as greyColor,
redColor, greenColor, etc
• Properties:
 text, font, textColor, editable, textAlignment, hidden
UITextField
• Found in IB library under Inputs & Values
• Properties:
 text, font, textColor, textAlignment, hidden
Closing the Keyboard
• Keyboard automatically displays on the lower half of the screen
when a field that allows input is touched
• Keyboard does not automatically close
 Must set the delegate (via the IB connection manager window)
for the textView, textField or other object that brings up the
keyboard to “File’s Owner”
 //when return is touched on the keyboard,
this is called
(BOOL)textFieldShouldReturn:
(UITextField*)theTextField
{
[theTextField resignFirstResponder];
return YES;
}
UILabel
• Found in IB library under Inputs & Values
• Properties:
 text, font, textColor, textAlignment, enabled,
adjustsFontSizeToFitWidth, minimumFontSize,
numberOfLines, highlightedTextColor, hidden
NSURL/NSURLRequest
• NSURL Functions:
 URLWithString:(NSString*)string
 initWithString:(NSString*)string
 URLWithString:(NSString*)string
relativeToURL:(NSURL*)url
 initWithString:(NSString*)string
relativeToURL:(NSURL*)url
• NSURLRequest Functions:
 initWithURL:(NSURL*)url
UIWebView
• Found in IB library under Data Views
• Properties:
 canGoBack, canGoForward, loading
• Methods:
 goBack, goForward, stopLoading, reload,
loadRequest:(NSURLRequest*)request
Creation Without IB

All UI Objects can be created without using the IB
 Create a CGRect variable to hold the object using
CGRectMake(x-offset, y-offset, width,
height)
Ex) CGRect r = CGRectMake(20.0, 20.0, 100.0,
40.0);
 Allocate the memory for and initialize the object using
initWithFrame:
Ex) UILabel *label = [[UILabel alloc]
initWithFrame:r];
 Set object specific properties
Ex) [label setText:@“Label Created”];
 Add to the appropriate view
Ex) [self addSubview:label];
Selectors
• Selectors are written into a table and used at runtime to
reference a method
• Class methods and instance methods with the same name would
be assigned the same selector
The @selector() directive allows the programmer to refer to
a compiled selector rather than method name
• To define a selector use SEL
Ex) SEL aSelector = @selector(toSelect);
• Other methods can be used to get selector information
 NSSelectorFromString(NSString)
 NSStringFromSelector(SEL)

Selectors
• Methods that use Selectors
 performSelector:(SEL)
 performSelector:(SEL) withObject:(id)
 performSelector:(SEL) withObject:(id)
withObject:(id)
Selector Example
-(void)method2:(int)i int2:(int)j
{
//outputs “12” to the debug console
cout << [i intValue] << [j intValue];
}
-(void)method
{
NSNumber* i = [NSNumber numberWithInt:1];
NSNumber* j = [NSNumber numberWithInt:2];
SEL s = @selector(method2:int2:);
[self performSelector:s withObject:i
withObject:j];
//outputs “method2:int2:” to debug console
cout << [NSStringFromSelector(s) cString];
}
Add a Target Method
• Can add an action to a UI object when it is touched
 [backButton addTarget:webView
action:@selector(goBack)
forControlEvents:UIControlEventTou
chUpInside];
Multiple Views with IB


Multiple views in Interface Builder can be
displayed and hidden by their “hidden” property
Multiple windows can be displayed and hidden by
their “hidden” property
Touches
• Four functions can be overwritten (in EAGLView or
ProjectNameViewController)
 -(void)touchesBegan:(NSSet*)touches
withEvent:(UIEvent*)event - Called when finger(s)
touch the display
 -(void)touchesMoved:(NSSet*)touches
withEvent:(UIEvent*)event - Called when finger(s) are
moved on the display
 -(void)touchesEnded:(NSSet*)touches
withEvent:(UIEvent*)event - Called when fingers(s) are
removed from the display
 -(void)touchesCancelled:(NSSet*)touches
withEvent:(UIEvent*)event - Called if the system
interrupts your application
Using Touches

In order for information about multiple touches to be passed,
must set “self.multipleTouchEnabled = YES;”
• The function’s parameters can be used to get information about
the touches

[[touches allObjects] objectAtIndex:0] - will
return the id of the first touch on the display.
 This id can be used to call the locationInView:self function
which returns a CGPoint struct (holds x and y coordinates)
Example of Multiple Touches
-(void) touchesEnded:(NSSet*)touches
withEvent:(UIEvent*)event
{
CGPoint touch;
int touchCount = [[event allTouches] count];
self.multipleTouchEnabled = YES;
for(int i=0; i<touchCount; i++)
{
touch = [[[touches allObjects]objectAtIndex:i]
locationInView:self];
printf("Touch #%i at (%f,%f)\n", i+1, touch.x,
touch.y);
}
}
Orientation
• iPhone has built in accelerometer that can be used to determine
orientation
• Need to turn orientation notifications on
 [[UIDevice currentDevice]
beginGeneratingDeviceOrientationNotification
s];

Can access by accessing [UIDevice
currentDevice].orientation
 0 represents state unknown
(UIDeviceOrientationUnknown)
 1 represent upright state in simulator
(UIDeviceOrientationPortrait)
 3 represents landscape view with left side down
(UIDeviceOrientationLandscapeLeft)
 4 represents landscape view with right side down
(UIDeviceOrientationLandscapeRight)
Exercise
• Create a program that draws 2 shapes.
These shapes will move toward the new
bottom of the screen if it is rotated.
Exercise
• Create a program that draws a textured
shape in the middle of the screen
 If two fingers are moved in parallel the image
moves in the direction of the fingers’ movement
 If two fingers move apart or towards each other
the shape is enlarged or shrunk
Exercise
• Create a program that draws a shape. Every
0.2 seconds the object moves to right, left,
up or down.
 Use touch events to control the direction that
the object moves
OpenGL ES Application
• Draw, rotate and move shapes
• Change colors and sizes at run-time
• Files (.m files can be renamed to .mm to allow Objective-C++)
 EAGLView (.h and .m) - Already imports OpenGL ES
library
• -(void)drawView - is called every
animationInterval seconds
• Other Functions already given include startAnimation,
stopAnimation, setAnimationInterval,
setAnimationTimer, dealloc, createFramebuffer,
destroyFramebuffer and initWithCoder
 ProjectNameAppDelegate (.h and .m) - Creates the window
and view
NSTimer
• Useful class that is frequently used to call a method
periodically based on time
• Methods
 [NSTimer
scheduledTimerWithTimeInterval:(flo
at seconds) target:(id target)
selector:@selector(method name)
userInfo:nil repeats:(YES or NO)];
OpenGL ES
• Some important OpenGL ES functions
 glEnable(capability) and glDisable(capability) enable or disable the capabilities declared by a
constant
• GL_TEXTURE_2D - allow textures to be mapped
to 2D objects
• GL_LIGHTING - allow lighting to modify colors
• GL_FOG - blend a fog color into the post texturing
color
• GL_BLEND - allows for transparency
OpenGL ES
 glClientEnableState(capability) and
glClientDisableState(capability) - enable and
disable a capability
• GL_VERTEX_POINTER - vertices of an object are
defined by an array of points
• GL_COLOR_POINTER - colors at vertices are
defined by an array of points
• GL_TEXTURE_COORD_POINTER - map texture
coordinates in an array to the texture
OpenGL ES
 glTranslatef(x, y, z) - move the object on the coordinate
plane by x, y and z
 glRotatef(x, y, z) - rotate the object around the line
defined by x, y and z
 glDrawArrays(mode, first, count)
• mode - the way to draw the object
 GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP,
GL_LINE_LOOP, GL_LINES
• first - the element in the array that represents the first point
• count - the number of points in the array
OpenGL ES
 glBlendFunc(sfactor, dfactor)
• sfactor - specifies how RGBA source blending computed (use
GL_SRC_ALPHA)
• dfactor - specifies how RGBA destination blending computed
(use GL_ONE_MINUS_SRC_ALPHA)
 glTexEnvf(target, pname, param) /
glTexEnvi(target,pname,param)
• target - specifies the texture environment
(GL_TEXTURE_ENV)
• pname - single valued texture environment parameter
(GL_TEXTURE_ENV_MODE)
• param - symbolic constant (GL_DECAL)
OpenGL ES
 glVertexPointer(dimensions, type, stride,
vertexPointer)
 glColorPointer(values, type, stride,
colorPointer)
 glColor4f(red, green, blue, alpha) /
glColor4ub(red, green, blue, alpha)
 glTexCoordPointer(dimensions, type,
texturePointer)
 glBindTexture(type, texture)
OpenGL ES
 glMatrixMode(type) - the type of view being worked
with
• GL_MODELVIEW - Position of the model relative to the
screen
• GL_PROJECTION - View seen on the screen
 glPushMatrix() - save the current view to a stack
 glPopMatrix() - retrieve the last view that was pushed
onto the stack
 glLoadIdentity() - replaces the current matrix with the
identity matrix (resets to defaults)
OpenGL ES
 glOrthof(xMin, xMax, yMin, yMax, zMin,
zMax) - set up the coordinate plan
•
•
•
•
•
•
xMin - the lowest x value visible
xMax - the highest x value visible
yMin - the lowest y value visible
yMax - the highest y value visible
zMin - the lowest z value visible
zMax - the highest z value visible
Load Textures
-(void)loadTexture:(NSString *)name intoLocation:(GLuint)location {
CGImageRef textureImage = [UIImage imageNamed:name].CGImage;
if (textureImage == nil) {
//If the image doesn’t exist, print an error
NSLog(@"Failed to load texture image");
return;
}
NSInteger texWidth = CGImageGetWidth(textureImage); //get the width
NSInteger texHeight = CGImageGetHeight(textureImage); //get the height
GLubyte *textureData = (GLubyte *)malloc(texWidth * texHeight * 4);
CGContextRef textureContext = CGBitmapContextCreate(textureData,texWidth,
texHeight,8, texWidth * 4, CGImageGetColorSpace (textureImage),
kCGImageAlphaPremultipliedLast);
CGContextTranslateCTM(textureContext, 0, texHeight);
CGContextScaleCTM(textureContext, 1.0, -1.0);
CGContextDrawImage(textureContext, CGRectMake(0.0, 0.0, (float)texWidth,
(float)texHeight), textureImage);
CGContextRelease(textureContext);
glBindTexture(GL_TEXTURE_2D, location);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA,
GL_UNSIGNED_BYTE, textureData);
free(textureData);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
glScale
• glScalef(GLfloat x, GLfloat y, GLfloat x)
• glScaled(GLdouble x, GLdouble y,
GLdouble z)
 Scale the current view matrix by x, y and z
Example
float vertices[] ={
1, 1,
1, 0,
0, 0,
0, 1
};
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslatef(5, 5, 0);
glScalef(0.5, 0.5, 0);
glVertexPointer(2, GL_FLOAT, 0, vertices);
glEnableClientState(GL_VERTEX_ARRAY);
glColor4ub(255, 255,51, 128);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 6);
glPopMatrix();
glDisable(GL_BLEND);
Exercise
• Create an application that draws 2 shapes which
will bounce off the sides of the screen and each
other. Add a texture and vector physics to this
shape if you need more of a challenge.
• Create an application that draws stars in the top
half of the screen.
 Each star has a random rotation and location on the
screen. The star will change a combination of size,
color, transparency or rotation periodically to simulate
twinkling.
Memory Management
If instance created by [Object alloc] message or
malloc(size) C function it will not be automatically
released. Each of these calls (as well as every time retain is
called) increments the retain count.
• Methods of releasing data (releasing the object reduces its retain
count)



release – [ObjectVariable release];
autorelease - [ObjectVariable autorelease]; (if makes retain
count 0, ensures object is not going to be referenced. Generally
object is released at end of function/current scope)
dealloc() is called when object’s retain count is 0 (similar to
C++ destructor)
 Release all appropriate instance variables in dealloc
Objective-C Classes

Interface declared by “@interface
ClassName:SuperClass” and ended by “@end”
SuperClass must always be “Object” or a subclass of
“Object” (NSObject for the iPhone)

Implementation declared by “@implementation
ClassName”
• All class methods are public
• Instance variables are private by default
• Classes can be extended with categories (example
later)

Objective-C
•
•
•
•
Used as default language in xcode
Can run almost all c programs
.h extension for header files and .m extension for implementation files
Methods in same class referenced using self (similar to the “this”
keyword in c++)
• Syntax:
 Default return type is ‘id’
 Message: [Object function:arg1
parameter2:arg2]; (similar to Object->function(arg1,
arg2);)
 -(returnType)function:(type)arg1
parameter2:(type)arg2 { code }
 +(returnType)staticFunction:(type)arg1
parameter2:(type)arg2 { code }
Extending Classes
// A class extension
@interface tempClass (Category)
// New methods
- (BOOL) tOrF;
- (void) doSomething;
@end
@implementation tempClass(Category)
- (BOOL) tOrF {…}
- (void) doSomething{…}
@end
Creating an iPhone Project
• “File->New Project…”
• Options we will discuss:
 OpenGL ES Application
 View-Based Application
 Tab Bar Application
Example of Objective-C
- (void)viewDidLoad
{
[super viewDidLoad];
[self fnWithInt];
}
Objective-C
• -(void)fnWithInt:(int)i int2:(int)j
 Method name - “fnWithInt:int2:”
• C can call Objective-C functions and Objective-C can
call C functions.
• “self” can not be used from C functions
 Work around this by creating a global variable or
passing type id
Objective-C Called by C
-(int)getInteger
{
return 5;
}
int aFunction(id this2)
{
/*print the value returned by the
getInteger function of the object
passed to the method*/
printf("%i", [this2 getInteger]);
return 10;
}
Concepts/Directives
• @synthesize - used to automatically create missing
getters (cd) and setters (setCd:) function for an instance
variable
• Synthesized variables must have an associated @property
 ex) @property (retain) UIDevice cd;
//creates 2 methods: “cd” and
“setCd:(UIDevice*)newDevice”
@synthesize cd;
…
//set cd to the current device using the
synthesized method
[self setCd:[UIDevice currentDevice]];
@property

@property (parameters) type name:
 nonatomic - allows more than one thread to access a
getter/setter at a time
 atomic - only allow one thread to access a getter/setter at a
time (default)
 retain - setter should use “retain” in the variable assignment
(ex: var1 = [var2 retain];)
• Used for objects
 assign - setter will assign directly to the variable
• Used for basic variable types
 readonly - setter will not be generated