330 likes | 418 Views
Wednesday 2-4, DH 1046. 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 cutler@rice.edu 9/21/11. Today’s Agenda. Events of the week
E N D
Wednesday 2-4, DH 1046 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 cutler@rice.edu 9/21/11
Today’s Agenda • Events of the week • Final Project Schedule • Mobile Web Apps (abbreviated) • Memory Management Summary Sheet • Drawing / Views / View Controllers • Review of current assignment • Next Week COMP 446 / ELEC 446 - Week 5
Events of the Week • Microsoft joins the anti-Flash crowd with IE10 • Netflix CEO apologizes for how rate hike was handled • Google turns again to IBM in patent-nabbing spree • RIM woes continue: Q2 earnings hit amid weak demand, product shift • PayPal offers sneak peek of upcoming virtual wallet offering • Google opens Wallet • Amazon Courting Magazine, Book Publishers for Kindle Tablet • Samsung returns fire on Apple patent suits in Australia, Germany COMP 446 / ELEC 446 - Week 5
COMP 446 Syllabus • 8/24/11 Introduction / What makes mobile apps special Videos: Lecture 1. Introduction to Cocoa Touch, Objective-C, Tools, and MVC (September 21, 2010) Lecture 2. Building a Simple Calculator (September 23, 2010) Assignment: #1 and #1 Walkthrough - Calculator Due: Preferably watch videos this week, definitely by 8/30. Assignment due 9/1/11. • 8/31/11 Discussion of first applications, Development Environment Videos: Lecture 3. Objective-C and Foundation Frameworks (September 28, 2010) Lecture 4. Foundation and Memory Management (September 30, 2010) Assignment: #2 Function Calculator (Due 9/15/11) • 9/7/11 Intro to Cocoa Touch, Objective-C, Using Objective-C, Foundation framework Videos: Assignment: • 9/14/11Memory Management Videos: Lecture 5. Protocols and Views (October 5, 2010) Lecture 6. Application & View Controller Lifecycle, Navigation Controller (October 7, 2010) Assignment: #3 Graphing Calculator (Due 9/22/11) • 9/21/11 iPhone (pseudo) Web Apps / ASP.Net / Browser Capabilities Videos: Lecture 7. More Controllers of Controllers, iPad, Universal Applications (October 12, 2010) Lecture 8. Gesture Recognizers (October 14, 2010) Assignment: #4 Universal Calculator (Due 9/29/11) COMP 446 / ELEC 446 - Week 5
COMP 446 Syllabus • 9/28/11 SQL 101 Videos: Lecture 9. Image View, Web View, and Scroll View (October 19, 2010) Lecture 10. Table View (October 21, 2010)Assignment: #5 Pictures Places (Due 10/13/11) • 10/5/11 Creating and Consuming Web Services Videos: Lecture 11. Persistence (October 26, 2010) Lecture 12. Core Data and Table Views (October 28, 2010) Assignment: #6 Core Data Places (Due 10/20/11, but watch lectures prior to 10/12/11 class) • 10/12/11 Final Project discussion and Pairing Videos: Debugging Tools (October 22, 2010)Kleiner Perkins iFund (October 15, 2010) Assignment: Final Project Proposal (Due 10/18/11 along with Core Data Places due 10/20/11) • 10/19/11 iOS 5 Videos: Lecture 13. Blocks and Multithreading (November 2, 2010) Lecture 14. Core Location and Map Kit (November 9, 2010) Assignment: Final Project, Stage 1 (Due 10/27/11) • 10/26/11 Android Videos: Lecture 15. Editable Text, Modal View Controllers, and View Animation (Nov 11, 2010) Lecture 16. Core Motion, Segmented Control, and Alerts (November 16, 2010) Assignment: Advanced Feature App (Due 11/03/11) COMP 446 / ELEC 446 - Week 5
COMP 446 Syllabus • 11/2/11 Windows Phone 7, Final Project Prep Videos: Lecture 17. Media (November 18, 2010) Lecture 18. Accessibility on iOS: Make an App for Everyone (November 30, 2010) Assignment: Final Project, Stage 2 (Due 11/10/2011) • 11/09/11 Final Project Prep / iPhone v. Android v. Windows Phone 7 group discussion Videos: Lessons from Bezos, Pincus, Young: CEO 2.0 (November 12, 2010) (Optional) LinkedIn: Shipping with CoreData (November 5, 2010) (Optional) Assignment: Final Project, Stage 3 (Due 11/17/2011) • 11/16/11 Final Project Prep Videos: Building Flipboard (November 19, 2010) (Optional) Assignment: Final Project Presentation (Due 11/30/2011) • 11/23/11 Thanksgiving – Continue Final Projects on your own • 11/30/11 Demonstrate Final Projects to class • 12/4/11 Class Offsite – Sunday (tentative) • Finals Submission of final code due by official finals date COMP 446 / ELEC 446 - Week 5
Final Project Time Line • Submit preliminary concept to website over next two weeks (by 10/5) • Sooner if possible • Determine if you want a solo project or a two person project • OK to pick your partners – you will not be assigned partners • Website will help • Roles and responsibilities must be clear • Encourage iPad + iPhone projects (I think they are cool) • Each person must be responsible for two advanced features • Can target iOS, Android or WP7 device • Time Line: • Short description of project by 10/5 • Feedback and iteration over next two weeks • Proposal submitted by 10/18/11 • Full Spec 10/27/11 • Various milestones including presentation to class on 11/30/11 • Final code for project incorporating comments from presentation due on the official finals date of the course. COMP 446 / ELEC 446 - Week 5
Mobile Web Apps COMP 446 / ELEC 446 - Week 5
Mobile Web Apps (abbreviated) • Quick and dirty way to deliver content to a mobile device • Examples: • pda.continental.com • m.gmail.com • Characteristics • Low bandwidth requirements • Native small screen layout • Minimized keyboard entry COMP 446 / ELEC 446 - Week 5
Detection of Mobile Device • Multiple methods based on server religion • Some examples: • “Request.browser” • WURFL – Wireless Universal Resource File • 51Degrees.mobi COMP 446 / ELEC 446 - Week 5
iUI – Pseudo iPhone Apps • Project started prior to App Store to allow websites to look like a native iPhone app • www.iui-js.org • Based on HTML, javascript, CSS • Apps look and act like TableView applications • Runs on iPhone, Android phones, iPad, most Android tablets, WebOS, RIM OS6 COMP 446 / ELEC 446 - Week 5
iUI Examples • My first iPhone “app” for the 2009 Cliburn Piano Competition: • www.WoodlandsSalonSeries.org/cliburn • Gallery of iUI powered applications: • http://www.iui-js.org/gallery COMP 446 / ELEC 446 - Week 5
Memory Management Cheat Sheet COMP 446 / ELEC 446 - Week 5
Memory Management of iVars • Declare in class header between { } NSArray *myArray; • @property declaration in header after { } @property (nonatomic, retain) NSArray *myArray; • @synthesize iVar in implementation file @synthesize myArray; • Release in dealloc method; [myArray release]; COMP 446 / ELEC 446 - Week 5
@property Memory Attribute • Use (assign) for delegates and other objects not needing memory management • Use (copy) for NSStrings or other object which might get changed by other methods behind your back • Use (retain) for most other objects • Use nothing (equivalent to assign) for non-object iVars like double or for derived properties (properties not based on iVars) assign retain copy @property (assign) id <FooDelegate> delegate; @property (retain) NSArray *myArray; @property (copy) NSString *name; @synthesize delegate; // would create: @ synthesize myArray; // would create: @synthesize name; // would create: • (void)setDelegate: (id) newDelegate • { • delegate= newDelegate; • } //no memory management • (void)setMyArray: (NSArray *)value • { • if (value != myArray) { • [myArray release]; • myArray= [value retain]; } • } //Old released, new retained • (void)setName: (NSString *)value • { • if (value != name) { • [name release]; • name = [value copy]; } • } // Creates a copy which you own COMP 446 / ELEC 446 - Week 5
Handling IBOutlets • Declare in class header between { } UILabel *myLabel; • @property declaration in header after { } @property (retain) IBOutletUILabel *myLabel; • @synthesize iVar in implementation file @synthesize myLabel; • Create private release method to set values to nil -(void) releaseOutlets {self.myLabel=nil;} • Call releaseOutlets in dealloc AND viewDidUnload [self releaseOutlets]; COMP 446 / ELEC 446 - Week 5
Handling IBOutlets • Declare in class header between { } UILabel *myLabel; • @property declaration in header after { } @property (retain) IBOutletUILabel *myLabel; • @synthesize iVar in implementation file @synthesize myLabel; • Create private release method to set values to nil -(void) releaseOutlets {self.myLabel=nil;} • Call releaseOutlets in dealloc AND viewDidUnload [self releaseOutlets]; • Alternate to 4 & 5self.myLabel=nil; //in viewDidUnload [myLabel release]; //in dealloc COMP 446 / ELEC 446 - Week 5
Objects Created in Methods • For methods that return objects: • iVar objects created in setters or getters should be retained taking care to release any previous values • Methods starting with new, copy or init should return retained objects • Other methods should return autoreleased objects • Objects temporarily created in methods and not returned: • should be released, not autoreleased, before end of method • use autorelease only for temporary objects needed after end of method COMP 446 / ELEC 446 - Week 5
Good, Better Best Good: - (NSDictionary *)testVariableValues {NSMutableDictionary*returnValue = [[NSMutableDictionaryalloc] init]; [returnValuesetObject:[NSNumber numberWithFloat:3.5] forKey:@”x”]; [returnValuesetObject:[NSNumber numberWithFloat:23.8] forKey:@”y”]; return [returnValueautorelease];} Better: - (NSDictionary *)testVariableValues{NSMutableDictionary*returnValue = [NSMutableDictionary dictionary]; [returnValuesetObject:[NSNumber numberWithFloat:3.5] forKey:@”x”]; [returnValuesetObject:[NSNumber numberWithFloat:23.8] forKey:@”y”]; return returnValue;} Best: - (NSDictionary *)testVariableValues{ return [NSDictionarydictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:3.5], @”x”, [NSNumber numberWithFloat:23.8], @”y”, nil];} // Source: CS193P fall 2010 Video #7 COMP 446 / ELEC 446 - Week 5
Videos 5 & 6 summary Slides based on CS 193p fall 2010 iTunes University videos COMP 446 / ELEC 446 - Week 5
Protocols • Definition of methods used by a helper / delegate class. • Good way to add customization to standard object • Similar to @interface, but no implementation • Included in the header file • Can have @optional and @required methods • A class declares that it supports “Foo” protocol by placing <Foo> next to an object: • @interface MyClass : NSObject<Foo> • Id <Foo> obj = [[MYClassalloc] init]; • @property (assign) id <Foo> delegate; COMP 446 / ELEC 446 - Week 5
Application Delegate • Automatically created by Xcode and provides the initial main window instance variable. • Implements the UIApplicationDelegate protocol • Most important method is:application:didFinishLaunchingWithOptions: • Perfect spot for initialization code. • Place to add our own view controllers COMP 446 / ELEC 446 - Week 5
UIView • Top level drawing class with many defined subclasses • Top level rectangular area for drawing. • Often contains multiple subviews and possibly one superview. • Views are ordered with definable transparency. • Memory Management: A superview retains its subviews. COMP 446 / ELEC 446 - Week 5
Drawing Coordinates • C based floats and structs • CGFloat data type • Two CGFloats make up a CGPoint or CGSize. • A CGPoint and a CGSize make a CGRect • CGRectaRect = CGRectMake (5.1, 7, 20, 30); • aRect.size.height =75; COMP 446 / ELEC 446 - Week 5
Drawing Coordinates • Origin (0, 0) in upper left. • Units in points and not Pixels • @property CGFloatcontentScaleFactor;//pixel • Three important @properties: • @property CGRect bounds; • Your view’s “bounding” rectangle • @property CGPoint center; • Your view’s center in superview’s coordinates • @property CGRect frame; • A rectangular area in superview’s coordinates that encompasses your view. COMP 446 / ELEC 446 - Week 5
Custom Views • Views often created in .xib file • Can be created in code with custom class • UIView subclass • Override drawRect: method • You NEVER call drawRect • Call UIView’s –(void)setNeedsDisplay; method • The API is C, not object-oriented. COMP 446 / ELEC 446 - Week 5
Drawing Process • First get a drawing context • Context is fancy word that collects the various drawing parameters. • CGContextRef context = UIGraphicsGetCurrentContext(); • No memory management (no *) • Create paths out of lines, arcs, etc. • Set colors, fonts, textures, etc. • Stroke or fill created paths to draw • Push and Pop context to make temporary changes COMP 446 / ELEC 446 - Week 5
Drawing Text and Images • Text normally drawn through UILabel subclass • NSString has methods to draw text using a UIFont object • -(void) drawAtPoint: withFont:; //NSString method • Images normally drawn through UIImageView subclass • UIImage can be used to create an image from a file or many other things • Can draw one through CGContext • Can extract NSData class bits from UIImages COMP 446 / ELEC 446 - Week 5
UIViewControllers • Many important subclasses • @property (retain) UIView *view; • Is instantiated in one of two ways (not both): • - (id) initWinthNibName: bundle:; • [[UIViewControlleralloc] init];//xib and bundle are nil • After initialized: viewDidLoad is called • Before appearance: viewWillAppear: animated:; called. • Other lifecycle methods: • viewWillDisappear: animated: • “did” versions of above • Methods to handle rotation COMP 446 / ELEC 446 - Week 5
Controller of Controllers • UINavigationController • Extremely common stack of cards views • UITabBarController • Managing separate sections of an app • UISplitViewController • iPad specific Master/Slave view controller • UITableViewController • Efficient way to display a lot of data in a table form. • Most often subclassed COMP 446 / ELEC 446 - Week 5
UINavigationController • Deep Dive view controller • Managed push and pop of views showing more detail • Top level object or as a section of a UITabBarController • Instantiation: • Create with alloc / init • Add controller’s view property to view hierarchy • UIViewControllers under a UINavigationController have a navigationController property used to push new views • Remember that ViewControllers retain their views. COMP 446 / ELEC 446 - Week 5
Protocols and Assignment #3 • The Calculator is an MVC with the CalculatorBrain as the Model • The Graphing MVC is supposed to be generic and use a protocol for its data (valueAtPointX) • Where should the protocol be defined? • Where should the protocol be implemented? COMP 446 / ELEC 446 - Week 5
Week 6 • Watch CS193p lectures #7 and #8 • Preferably before Saturday. Definitely before next class. • Complete CS193p Assignment #4 • Try and complete before next class. Due day after next class. • Submit assignments, review lectures at www.comp446.com • Let me know your thoughts on final project • Preferably fill out final project section of assignment website COMP 446 / ELEC 446 - Week 5