COMP446_Fall_2012_Lecture_3
Download
Report
Transcript COMP446_Fall_2012_Lecture_3
COMP 446 / ELEC 446
Mobile Device Applications
Scott Cutler
Professor in the Practice of Computer Technology
Department of Computer Science
Department of Electrical and Computer Engineering
[email protected]
9/25/12
Wednesday 2-3:30, DH 1046
Agenda
Events of the Week
Syllabus
Review of Assignment 1
Next week’s assignment and class
Some more on Objective C
Questions on Assignment #2
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
2
Event of the Week
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
3
Events of the Week
HTC has 'no intention' to settle with Apple, say reports
Apple Requests U.S. Sales Ban on Eight Samsung Devices
Apple's Victory vs. Samsung Is Patently Meaningless
Nokia teases September 5 event, says 'things are about to change‘
Amazon taps Nokia for Kindle Fire maps, report says
Amazon's Appstore expands to five European countries
Kindle Fire 'sold out' as new model looms
Samsung goes all in with Windows 8 in new line of devices
Windows 8, Windows Phone 8 launch dates revealed
Windows Phone 8 Gets a Chance to Shine
Windows Server 2012 launches as cornerstone of Microsoft's 'Cloud OS'
HP, Dell, Lenovo, Others Pack Tablet Market at IFA 2012
Google, Apple CEOs Talk While Their Patent Battles Rage: Report
Google Street View Brings 'Punch Buggy' Game Online
'Eastwooding' meme sweeps across Twitter
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
4
Current Roster
Victor Acuna
Ryan Artecona
Gbenga Badipe
Joel Baranowski
Peter Chang
Joan Chao
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
5
Current Roster (2)
Alex Chiu
Heaven Chen
Lingo Dai
Weibo He
Sahil Hingorani
Zhehao Li
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
6
Current Roster (3)
Abdul Nimeri
Bill Robertson
Frank Salinas
Tyler Siegert
Austin Witt
Matthew Zhao
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
7
Optional Sessions and Support
Monday office hours with TA Richard Latimer. 4:00pm Mudd
Additional session Thursday, 9pm on 8/30 and 9/6.
Ability to email questions to me at any time.
Can email Richard Latimer as well.
Level of support will vary over semester
SEC - 9/5/12
High level of support at the beginning.
Support decreasing each project as over time as knowing
where to look or how to debug is a very important skill for
you to learn.
Richard instructed to respond conceptually – not just provide
solutions.
COMP 446 / ELEC 446 - Week 3
8
COMP 446 (tentative) Syllabus
Lecture 1 - 8/22/12 - Introduction
1, 2
#2 – Function Calculator
Friday, 9/7 6:00 am (Thursday 30:00)
Watch before:
Assignment:
Assignment due:
3, 4 (demo part)
#3 – Graphing Universal Calculator
Tuesday, 9/18 6:00 am (Monday 30:00)
Lecture 4 - 9/12/12 - Assignment 3 issues and questions from videos
Watch before:
Assignment:
Assignment due:
Lecture 3 - 9/05/12 - Assignment 2 issues and questions from videos
None
#1 - Calculator
Friday, 8/31 6:00 am (Thursday 30:00)
Lecture 2 - 8/29/12- Assignment 1 issues and questions from videos
Watch before:
Assignment:
Assignment due:
Watch before:
Assignment:
Assignment due:
4 (post demo), 5, 6
Continue with #3 – Graphing Universal Calculator
Tuesday, 9/18 6:00 am (Monday 30:00)
Lecture 5 - 9/19/12 - Assignment 3 issues and questions from videos
Watch before:
Assignment:
Assignment due:
SEC - 9/5/12
Watch 7 before class, 8 after class
#4 – Fiickr Top Places
Friday, 9/28 6:00 am (Thursday 30:00)
COMP 446 / ELEC 446 - Week 3
9
COMP 446 (tentative) Syllabus
Lecture 6 - 9/26/12 - Assignment 4 issues and questions from videos
Watch before:
Assignment:
Assignment due:
10 (after Tab Bar), 11, 12
1: #6 – Fiickr Core Data
- Likely to be broken into required and optional parts
- Optional part required for A+
2: Final Project Topic (due before next class)
Friday, 10/12 6:00 am (Thursday 30:00)
Lecture 8 - 10/10/12 - Assignment 6 issues and SQL
8, 9 very beginning of 10
#5 – Fiickr Map Places
Friday, 10/5 6:00 am (Thursday 30:00)
Lecture 7 - 10/03/12 - Assignment 5 issues and questions from videos
Watch before:
Assignment:
Assignment due:
Watch before:
Assignment:
Assignment due:
13, 14
Final Project Proposal
Tuesday, 10/16 6:00 am (Monday 30:00)
Lecture 9 - 10/17/12 - iOS 6
Watch before:
Assignment:
Assignment due:
SEC - 9/5/12
Optional 15, 16
iOS 6 app
Friday, 10/26 6:00 am (Thursday 30:00)
COMP 446 / ELEC 446 - Week 3
10
COMP 446 (tentative) Syllabus
Lecture 10 - 10/24/12 – HTML 5
Assignment:
Assignment due:
Continue working on Final Project
Wednesday, 11/28 2:00pm
Assignment:
Assignment due:
Continue working on Final Project
Wednesday, 11/28 2:00pm
Lecture 14 - 11/21/12 – No class, but continue on final project
Continue working on Final Project
Wednesday, 11/28 2:00pm
Lecture 13 - 11/14/12 - Individual meetings on Final Project
Assignment:
Assignment due:
Lecture 12 - 11/7/12- Android vs. iOS vs. Windows Phone group debate
Optional 17, 18
Major Final Project Feature
Friday, 11/2 6:00 am (Thursday 30:00)
Lecture 11 - 10/31/12 - TBD
Watch before:
Assignment:
Assignment due:
Assignment:
Assignment due:
Continue working on Final Project
Wednesday, 11/28 2:00pm
Lecture 15 - 11/28/12 - Final Presentations
Assignment:
Assignment due:
SEC - 9/5/12
Document Final Project
By time assigned for COMP 446 final (there is NO final exam)
COMP 446 / ELEC 446 - Week 3
11
Week 4
Watch CS193p lectures #4 (after demo), #5, #6 before class
Make progress on CS193p Assignment #3
Try and complete before next class. Due Tuesday, 9/18 6:00 am .
Submit assignments, review lectures at www.comp446.com
Start thinking about big project
Next week’s lecture – Objective C Core Graphics
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
12
Assignment #1 Comments
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
13
Review of Video 3 Items
Many of the slides to follow come directly
from the Fall 2011 Stanford CS193p slide
deck.
Some come from earlier versions of CS193p
which I think were a bit clearer than the
current deck
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
14
All Those Symbols
;
@
+
//
-
.
{}
#
[]
!
()
+=
*
%
**
==
:
^
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
15
strong vs weak
strong “keep this in the heap until I don’t point to it anymore”
I won’t point to it anymore if I set my pointer to it to nil.
Or if I myself am removed from the heap because no one strongly points to me!
weak “keep this as long as someone else points to it strongly”
If it gets thrown out of the heap, set my pointer to it to nil automatically (if user on
iOS 5 only).
This is not garbage collection!
It’s way better. It’s reference counting done automatically for you.
Finding out that you are about to leave the heap
A special method, dealloc, is called on you when your instance’s memory is freed from the
heap.
You will rarely ever have to implement this method. It’s “too late” to do much useful here.
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
16
nil
The value of an object pointer that does not point to anything
id obj = nil;
NSString *hello = nil;
Like “zero” for a primitive type (int, double, etc.)
Actually, it’s not “like” zero: it is zero.
All instance variables start out set to zero
Thus, instance variables that are pointers to objects start out with the value of nil.
Can be implicitly tested in an if statement
if (obj) { } // curly braces will execute if obj points to an object
Sending messages to nil is (mostly) okay. No code gets executed.
If the method returns a value, it will return zero.
int i = [obj methodWhichReturnsAnInt]; // i will be zero if obj is nil
Be careful if the method returns a C struct. Return value is undefined.
CGPoint p = [obj getLocation]; // p will have an undefined value if obj is nil
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
17
BOOL
Objective-C’s boolean “type” (actually just a typedef)
Can be tested implicitly
if (flag) { }
if (!flag) { }
YES means “true,” NO means “false”
NO == 0, YES is anything else
if (flag == YES) { }
if (flag == NO) { }
if (flag != NO) { }
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
18
Instance vs. Class Methods
Starts with a dash
- (BOOL)dropBomb:(Bomb *)bomb
at: (CGPoint)position
from:(double)altitude;
“Normal” Instance Methods
Calling syntax
[<pointer to instance> method]
Ship *ship = ...; // instance of a Ship
destroyed = [ship dropBomb:firecracker
at:dropPoint
from:300.0];
self / super is calling instance
self means “my implementation”
super means “my superclass’s
implementation”
SEC - 9/5/12
Starts with a plus sign
+ (id) alloc;
+ (Ship *)motherShip;
+ (NSString *)stringWithFormat:...
Creation & Utility Methods
Calling syntax
[Class method]
Ship *ship = [Ship motherShip];
NSString *resultString =
[NSString stringWithFormat:@“%g”, result];
[[ship class] doSomething];
self / super is this class
self means “this class’s class methods”
super means “this class’s superclass’s class
methods”
COMP 446 / ELEC 446 - Week 3
19
Instantiation
Asking other objects to create objects for you
NSString’s - (NSString *)stringByAppendingString:(NSString *)otherString;
NSString’s & NSArray’s - (id)mutableCopy;
NSArray’s - (NSString *)componentsJoinedByString:(NSString *)separator;
Not all objects handed out by other objects are newly created
NSArray’s - (id)lastObject;
NSArray’s - (id)objectAtIndex:(int)index;
Unless the method has the word “copy” in it, if the object already exists, you get a pointer to it.
If the object does not already exist (like the 3 examples above), then you’re creating.
Using class methods to create objects
NSString’s + (id)stringWithFormat:(NSString *)format, ...
UIButton’s + (id)buttonWithType:(UIButtonType)buttonType;
NSMutableArray’s + (id)arrayWithCapacity:(int)count;
NSArray’s + (id)arrayWithObject:(id)anObject;
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
20
Object Typing
@interface Vehicle
- (void)move;
@end
@interface Ship : Vehicle
- (void)shoot;
@end
Ship *s = [[Ship alloc] init];
[s shoot];
[s move];
SEC - 9/5/12
Vehicle *v = s;
[v shoot];
id obj = ...;
[obj shoot];
[obj someMethodNameThatNoObjectAnywhereRespondsTo];
NSString *hello = @”hello”;
[hello shoot];
Ship *helloShip = (Ship *)hello;
[helloShip shoot];
COMP 446 / ELEC 446 - Week 3
21
Introspection
All objects that inherit from NSObject know these methods
isKindOfClass: returns whether an object is that kind of class (inheritance included)
isMemberOfClass: returns whether an object is that kind of class (no inheritance)
respondsToSelector: returns whether an object responds to a given method
Method testing methods take a selector (SEL)
Special @selector() directive turns the name of a method into a selector
if ([obj respondsToSelector:@selector(shoot)]) {
[obj shoot];
} else if ([obj respondsToSelector:@selector(shootAt:)]) {
[obj shootAt:target];
}
SEL is the Objective-C “type” for a selector
SEL shootSelector = @selector(shoot);
SEL shootAtSelector = @selector(shootAt:);
SEL moveToSelector = @selector(moveTo:withPenColor:);
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
22
Frameworks
A collection of pre-written and debugged code
Foundation contains base class for much in iOS SDK
MANY other frameworks available; some of which you will
use for later assignments and your final project.
Frameworks help make difficult things amazingly easy
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
23
Foundation Framework
Value and collection classes
User defaults
Archiving
Notifications
Undo manager
Tasks, timers, threads
File system, pipes, I/O, bundles
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
24
NSObject
Root class
Implements many basics
SEC - 9/5/12
Memory management
Introspection
Object equality
COMP 446 / ELEC 446 - Week 3
25
NSString
General-purpose Unicode string support
Unicode is a coding system which represents all of the
world’s languages
Consistently used throughout Cocoa Touch instead of “char *”
Without doubt the most commonly used class
Easy to support any language in the world with Cocoa
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
26
String Constants
In C constant strings are
“simple”
In ObjC, constant strings are
@“just as simple”
Constant strings are NSString instances
NSString *aString = @”Hello World!”;
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
27
Format Strings
Similar to printf, but with %@ added for objects
NSString *aString = @”Johnny”;
NSString *log = [NSString stringWithFormat: @”It’s ‘%@’”, aString];
log would be set to It’s ‘Johnny’
Also used for logging
NSLog(@”I am a %@, I have %d items”, [array className], [array count]);
would log something like:
I am a NSArray, I have 5 items
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
28
NSString
Often ask an existing string for a new string with modifications
- (NSString *)stringByAppendingString:(NSString *)string;
- (NSString *)stringByAppendingFormat:(NSString *)string;
- (NSString *)stringByDeletingPathComponent;
Example:
NSString *myString = @”Hello”;
NSString *fullString;
fullString = [myString stringByAppendingString:@” world!”];
fullString would be set to Hello world!
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
29
NSString
Common NSString methods
- (BOOL)isEqualToString:(NSString *)string;
- (BOOL)hasPrefix:(NSString *)string;
- (int)intValue;
- (double)doubleValue;
Example:
NSString *myString = @”Hello”;
NSString *otherString = @”449”;
if ([myString hasPrefix:@”He”]) {
// will make it here
}
if ([otherString intValue] > 500) {
// won’t make it here
}
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
30
NSMutableString
NSMutableString subclasses NSString
Allows a string to be modified
Common NSMutableString methods
+ (id)string;
- (void)appendString:(NSString *)string;
- (void)appendFormat:(NSString *)format, ...;
NSMutableString *newString = [NSMutableString string];
[newString appendString:@”Hi”];
[newString appendFormat:@”, my favorite number is: %d”,
[self favoriteNumber]];
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
31
Collections
Array - ordered collection of objects
Dictionary - collection of key-value pairs
Set - unordered collection of unique objects
Ordered Set - ordered collection of unique objects
Common enumeration mechanism
Immutable and mutable versions
SEC - 9/5/12
Immutable collections can be shared without side
effect
Prevents unexpected changes
Mutable objects typically carry a performance
overhead
COMP 446 / ELEC 446 - Week 3
32
NSArray
Common NSArray methods
+ arrayWithObjects:(id)firstObj, ...; // nil terminated!!!
- (unsigned)count;
- (id)objectAtIndex:(unsigned)index;
- (unsigned)indexOfObject:(id)object;
NSNotFound returned for index if not found
NSArray *array = [NSArray arrayWithObjects:@”Red”, @”Blue”,
@”Green”, nil];
if ([array indexOfObject:@”Purple”] == NSNotFound) {
NSLog (@”No color purple”);
}
Be careful of the nil termination!!!
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
33
NSMutableArray
NSMutableArray subclasses NSArray
So, everything in NSArray
Common NSMutableArray Methods
+ (NSMutableArray *)array;
- (void)addObject:(id)object;
- (void)removeObject:(id)object;
- (void)removeAllObjects;
- (void)insertObject:(id)object atIndex:(unsigned)index;
NSMutableArray *array = [NSMutableArray array];
[array addObject:@”Red”];
[array addObject:@”Green”];
[array addObject:@”Blue”];
[array removeObjectAtIndex:1];
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
34
NSDictionary
Common NSDictionary methods
+ dictionaryWithObjectsAndKeys: (id)firstObject, ...;
- (unsigned)count;
- (id)objectForKey:(id)key;
nil returned if no object found for given key
NSDictionary *colors = [NSDictionary
dictionaryWithObjectsAndKeys:@”Red”, @”Color 1”,
@”Green”, @”Color 2”, @”Blue”, @”Color 3”, nil];
NSString *firstColor = [colors objectForKey:@”Color 1”];
if ([colors objectForKey:@”Color 8”]) {
// won’t make it here
}
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
35
NSMutableDictionary
NSMutableDictionary subclasses NSDictionary
Common NSMutableDictionary methods
+ (NSMutableDictionary *)dictionary;
- (void)setObject:(id)object forKey:(id)key;
- (void)removeObjectForKey:(id)key;
- (void)removeAllObjects;
NSMutableDictionary *colors = [NSMutableDictionary dictionary];
[colors setObject:@”Orange” forKey:@”HighlightColor”];
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
36
NSSet
Unordered collection of objects
Common NSSet methods
+ setWithObjects:(id)firstObj, ...; // nil terminated
- (unsigned)count;
- (BOOL)containsObject:(id)object;
NSOrderedSet
SEC - 9/5/12
Faster searching
Does not inherit from NSSet
COMP 446 / ELEC 446 - Week 3
37
NSMutableSet
NSMutableSet subclasses NSSet
Common NSMutableSet methods
+ (NSMutableSet *)set;
- (void)addObject:(id)object;
- (void)removeObject:(id)object;
- (void)removeAllObjects;
- (void)intersectSet:(NSSet *)otherSet;
- (void)minusSet:(NSSet *)otherSet;
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
38
Enumeration
Consistent way of enumerating over objects in collections
Use with NSArray, NSDictionary, NSSet, etc.
NSArray *array = ... ; // assume an array of People objects
// old school
Person *person;
int count = [array count];
for (i = 0; i < count; i++) {
person = [array objectAtIndex:i];
NSLog([person description]);
}
// new school
for (Person *person in array) {
NSLog([person description]);
}
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
39
NSNumber
In Objective-C, you typically use standard C number types
NSNumber is used to wrap C number types as objects
Subclass of NSValue
No mutable equivalent!
Common NSNumber methods
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithDouble:(double)value;
- (int)intValue;
- (double)doubleValue;
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
40
Other Classes
NSData / NSMutableData
Arbitrary sets of bytes
NSDate / NSCalendarDate
Times and dates
NSValue
SEC - 9/5/12
Object store for object pointers and other
values like C structures, int, float, char, etc.
COMP 446 / ELEC 446 - Week 3
41
Property List
The term “Property List” just means a collection of collections
Specifically, it is any graph of objects containing only the following classes:
NSArray, NSDictionary, NSNumber, NSString, NSDate, NSData
An NSArray is a Property List if all its members are too
So an NSArray of NSString is a Property List.
So is an NSArray of NSArray as long as those NSArray’s members are Property Lists.
An NSDictionary is one only if all keys and values are too
An NSArray of NSDictionarys whose keys are NSStrings and values are NSNumbers
is one.
Why define this term?
Because the SDK has a number of methods which operate on Property Lists.
Usually to read them from somewhere or write them out to somewhere.
[plist writeToFile:(NSString *)path atomically:(BOOL)]; // plist is NSArray or NSDictionary
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
42
NSUserDefaults
Lightweight storage of Property Lists.
It’s basically an NSDictionary that persists between launches of your application.
Not a full-on database, so only store small things like user preferences.
Read and write via a shared instance obtained via class method standardUserDefaults
[[NSUserDefaults standardUserDefaults] setArray:rvArray forKey:@“RecentlyViewed”];
Sample methods:
- (void)setDouble:(double)aDouble forKey:(NSString *)key;
- (NSInteger)integerForKey:(NSString *)key; // NSInteger is a typedef to 32 or 64 bit int
- (void)setObject:(id)obj forKey:(NSString *)key; // obj must be a Property List
- (NSArray *)arrayForKey:(NSString *)key; // will return nil if value for key is not NSArray
Always remember to write the defaults out after each batch of changes!
[[NSUserDefaults standardUserDefaults] synchronize];
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
43
Assignment #2 Questions
SEC - 9/5/12
COMP 446 / ELEC 446 - Week 3
44