Slide 1

Slide 1 text

Shao-Chung, Chen Dannvix [at] gmail.com VIPLab @ CSIE, NTNU December 2, 2010 S.C. Chen @ VIPLab 1

Slide 2

Slide 2 text

• – December 2, 2010 S.C. Chen @ VIPLab 2

Slide 3

Slide 3 text

December 2, 2010 S.C. Chen @ VIPLab 3

Slide 4

Slide 4 text

December 2, 2010 S.C. Chen @ VIPLab 4 

Slide 5

Slide 5 text

• • • • December 2, 2010 S.C. Chen @ VIPLab 5

Slide 6

Slide 6 text

• – • – • – • – December 2, 2010 S.C. Chen @ VIPLab 6

Slide 7

Slide 7 text

December 2, 2010 S.C. Chen @ VIPLab 7

Slide 8

Slide 8 text

December 2, 2010 S.C. Chen @ VIPLab 8

Slide 9

Slide 9 text

December 2, 2010 S.C. Chen @ VIPLab 9

Slide 10

Slide 10 text

• • • • • • December 2, 2010 S.C. Chen @ VIPLab 10

Slide 11

Slide 11 text

• – – • – • – – • December 2, 2010 S.C. Chen @ VIPLab 11

Slide 12

Slide 12 text

December 2, 2010 S.C. Chen @ VIPLab 12 main() main.m MyAppDelegate.h MyAppDelegate.m MyViewController.h MyViewController.m MyViewController.xib

Slide 13

Slide 13 text

December 2, 2010 S.C. Chen @ VIPLab 13 int main (int agrc, char* argv[]) { NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init]; int retval = UIApplication( argc, argv, nil, @“MyAppDelegate"); [pool release]; return retval; }

Slide 14

Slide 14 text

December 2, 2010 S.C. Chen @ VIPLab 14 int main (int agrc, char* argv[]) { NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init]; int retval = UIApplication( argc, argv, nil, @“MyAppDelegate"); [pool release]; return retval; }

Slide 15

Slide 15 text

December 2, 2010 S.C. Chen @ VIPLab 15 int main (int agrc, char* argv[]) { NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init]; int retval = UIApplication( argc, argv, nil, @“MyAppDelegate"); [pool release]; return retval; }

Slide 16

Slide 16 text

December 2, 2010 S.C. Chen @ VIPLab 16

Slide 17

Slide 17 text

• – • – myobj->setA(3); – [myobj setA: 3]; • • December 2, 2010 S.C. Chen @ VIPLab 17

Slide 18

Slide 18 text

• – @ @"Foo“ – printf("%s %@", "Foo", @"Bar"); • – NSArray *colors = [NSArray arrayWithObjects: @"Black", @"Gray", nil]; for (NSString *color in colors) printf("a %@ car\n", color); December 2, 2010 S.C. Chen @ VIPLab 18

Slide 19

Slide 19 text

• new delete – –  • – • BOOL TRUE YES FALSE NO December 2, 2010 S.C. Chen @ VIPLab 19

Slide 20

Slide 20 text

• • http://www.mactech.com/articles/mactech/V ol.13/13.03/CandObjectiveCCompared/ December 2, 2010 S.C. Chen @ VIPLab 20

Slide 21

Slide 21 text

@interface December 2, 2010 S.C. Chen @ VIPLab 21 #import @interface Car : NSObject { int year; NSString *make; NSString *model; } - (void) setMake:(NSString *) aMake andModel:(NSString *) aModel andYear:(int) Year; - (void) printCarInfo; - (int) year; @end

Slide 22

Slide 22 text

December 2, 2010 S.C. Chen @ VIPLab 22 • void setProperties(char *c1, char *c2, int i); myCar->setProperties("Foo", "Bar", 5566); • - (void) setMake:(NSString *) aMake andModel:(NSString *) aModel andYear:(int) year; [myCar setMake:@"Foo" andModel:@"Bar", andYear:5566]; setProperties() setMake:andModel:andYear:

Slide 23

Slide 23 text

December 2, 2010 S.C. Chen @ VIPLab 23 NSArray *anotherArray = [NSMutableArray array]; // addObject: is a mutable-only method [anotherArray addObject: @"Hello World"]; 1) NSArray *myArray = [NSArray array]; 2) NSMutableArray *mutableArray; 3) mutableArray = myArray; 4) [mutableArray addObject: @"Hello World"]; Produces a compile-time warning, but works fine Line #3 produces a compile-time warning, Line #4 will BOMB at run-time

Slide 24

Slide 24 text

@implementation December 2, 2010 S.C. Chen @ VIPLab 24 #import "Car.h" @implementation - (id) init { self = [super init]; if (!self) return nil; make = model = nil, year = 1901; return self; } - (void) setMake:(NSString *) aMake andModel: (NSString *) aModel andYear:(int) year { make = [NSString stringWithString: aMake]; model = [NSString stringWithString aModel]; year = aYear; }

Slide 25

Slide 25 text

@implementation December 2, 2010 S.C. Chen @ VIPLab 25 #import "Car.h" @implementation - (id) init { self = [super init]; if (!self) return nil; make = model = nil, year = 1901; return self; } - (void) setMake:(NSString *) aMake andModel: (NSString *) aModel andYear:(int) year { make = [NSString stringWithString: aMake]; model = [NSString stringWithString aModel]; year = aYear; }

Slide 26

Slide 26 text

• – • Car *myCar = [Car car]; • [myCar printCarInfo]; – - • - (void) printCarInfo() • – • [[Car alloc] init]; – + • + (void) init { super[init]; return init; } December 2, 2010 S.C. Chen @ VIPLab 26

Slide 27

Slide 27 text

• – NSObject • – – – • super December 2, 2010 S.C. Chen @ VIPLab 27

Slide 28

Slide 28 text

December 2, 2010 S.C. Chen @ VIPLab 28 NSObject NSArray NSString UIResponder UIView UILabel UIControl UISlider UITextFied

Slide 29

Slide 29 text

• • NSLog() – NSLog(@"Current Make: %@\n", make); – 2010-12-02 12:05:23.784 HelloWorld[11197:20b] Current Make: VIPLab • CFShow() stderr – CFShow(make); – December 2, 2010 S.C. Chen @ VIPLab 29

Slide 30

Slide 30 text

December 2, 2010 S.C. Chen @ VIPLab 30

Slide 31

Slide 31 text

December 2, 2010 S.C. Chen @ VIPLab 31

Slide 32

Slide 32 text

• – Car *car = [[Car alloc] init]; – Car *car = [[[Car alloc] init] autorelease]; – Car *car = [Car car]; • + (Car *) car { return [[[Car alloc] init] autorelease]; } • December 2, 2010 S.C. Chen @ VIPLab 32

Slide 33

Slide 33 text

• – • – – – • http://osxchat.blogspot.com/2005/05/objecti ve-ccocoa.html – December 2, 2010 S.C. Chen @ VIPLab 33

Slide 34

Slide 34 text

retainCount December 2, 2010 S.C. Chen @ VIPLab 34 unsigned rc = [myCar retainCount];

Slide 35

Slide 35 text

retain release release dealloc December 2, 2010 S.C. Chen @ VIPLab 35 retain release

Slide 36

Slide 36 text

init* December 2, 2010 S.C. Chen @ VIPLab 36 init* Car *myCar = [[Car alloc] init];

Slide 37

Slide 37 text

NSString +stringWithUTF8String - stringByAppendingString retain December 2, 2010 S.C. Chen @ VIPLab 37 retain

Slide 38

Slide 38 text

init* retain dealloc December 2, 2010 S.C. Chen @ VIPLab 38 retain

Slide 39

Slide 39 text

December 2, 2010 S.C. Chen @ VIPLab 39 @interface Foo : NSObject { NSString *m_name; } - (id) initWithName:(NSString *) name; @end

Slide 40

Slide 40 text

December 2, 2010 S.C. Chen @ VIPLab 40 @implementation Foo { - (id) initWithName:(NSString *) name { self = [super init]; if (!self) return nil; m_name = name; [m_name retain]; return self; } - (void) dealloc { [m_name release]; [super dealloc]; } }

Slide 41

Slide 41 text

release [pool release] release December 2, 2010 S.C. Chen @ VIPLab 41

Slide 42

Slide 42 text

retain NSString NSData NSURL December 2, 2010 S.C. Chen @ VIPLab 42

Slide 43

Slide 43 text

December 2, 2010 S.C. Chen @ VIPLab 43 int bar (const char *p) { NSString *q = [[NSString alloc] initWithUTF8String: p]; if (SOME_ERROR_OCCURS) { [q release]; return -1; } // ... if (ANOTHER_ERROR_OCCURS) { [q release]; return -1; } [q release]; return 0; } init*

Slide 44

Slide 44 text

December 2, 2010 S.C. Chen @ VIPLab 44 int bar (const char *p) { NSString *q = [NSString stringWithUTF8String:p]; if (SOME_ERROR_OCCURS) { return -1; } // ... if (ANOTHER_ERROR_OCCURS) { return -1; } return 0; }

Slide 45

Slide 45 text

• • release – dealloc – retain December 2, 2010 S.C. Chen @ VIPLab 45

Slide 46

Slide 46 text

@property • @property • – @property NSString *make; • – @property (retain) NSString *make; • retain – @property (copy) NSString *make; • – @property (readonly) NSString *make; • December 2, 2010 S.C. Chen @ VIPLab 46

Slide 47

Slide 47 text

@property @interface Person : NSObject { NSString *name; } @property (copy) NSString *name; @end @implementation Person @synthesize name; // ... @end December 2, 2010 S.C. Chen @ VIPLab 47

Slide 48

Slide 48 text

• • December 2, 2010 S.C. Chen @ VIPLab 48

Slide 49

Slide 49 text

@interface MyDelegate : NSObject { } - (BOOL) applicationShouldTerminateAfterLastWindowClosed: (NSApplication *) theApplication; - (BOOL) windowShouldClose:(id) window; @end December 2, 2010 S.C. Chen @ VIPLab 49

Slide 50

Slide 50 text

@implementation MyDelegate - (BOOL) applicationShouldTerminateAfterLastWindowClosed: (NSApplication *) theApplication: { return YES; } - (BOOL) windowShouldClose:(id) window { NSAlert *alert = [[NSAlert alloc] init]; // ... show an alert and get the users’ response if (result == NSAlertFirstButtonReturn) { /* ... */} [alert release]; return NO; } @end December 2, 2010 S.C. Chen @ VIPLab 50

Slide 51

Slide 51 text

• MyDelegate NSApplication NSWindow • December 2, 2010 S.C. Chen @ VIPLab 51

Slide 52

Slide 52 text

@protocol • – • •  December 2, 2010 S.C. Chen @ VIPLab 52

Slide 53

Slide 53 text

• NSString NSURL NSNumber NSDate NSTimer NSArray NSDictionary NSData • – NSArray NSMutableArray • December 2, 2010 S.C. Chen @ VIPLab 53

Slide 54

Slide 54 text

December 2, 2010 S.C. Chen @ VIPLab 54

Slide 55

Slide 55 text

December 2, 2010 S.C. Chen @ VIPLab 55 /Developer/Application/Xcode.app

Slide 56

Slide 56 text

December 2, 2010 S.C. Chen @ VIPLab 56

Slide 57

Slide 57 text

December 2, 2010 S.C. Chen @ VIPLab 57

Slide 58

Slide 58 text

December 2, 2010 S.C. Chen @ VIPLab 58

Slide 59

Slide 59 text

December 2, 2010 S.C. Chen @ VIPLab 59

Slide 60

Slide 60 text

December 2, 2010 S.C. Chen @ VIPLab 60

Slide 61

Slide 61 text

December 2, 2010 S.C. Chen @ VIPLab 61

Slide 62

Slide 62 text

December 2, 2010 S.C. Chen @ VIPLab 62

Slide 63

Slide 63 text

December 2, 2010 S.C. Chen @ VIPLab 63

Slide 64

Slide 64 text

December 2, 2010 S.C. Chen @ VIPLab 64

Slide 65

Slide 65 text

• • – • – • • https://gist.github.com/724673 December 2, 2010 S.C. Chen @ VIPLab 65

Slide 66

Slide 66 text

December 2, 2010 S.C. Chen @ VIPLab 66

Slide 67

Slide 67 text

• • December 2, 2010 S.C. Chen @ VIPLab 67

Slide 68

Slide 68 text

December 2, 2010 S.C. Chen @ VIPLab 68

Slide 69

Slide 69 text

• – • • – • – • – • – December 2, 2010 S.C. Chen @ VIPLab 69

Slide 70

Slide 70 text

• • • – – – December 2, 2010 S.C. Chen @ VIPLab 70

Slide 71

Slide 71 text

• – UITextView – UILabel – UIImageView – UIWebView – MKMapView • MKAnnoatationView MKPinAnnoationView – UIScrollView December 2, 2010 S.C. Chen @ VIPLab 71

Slide 72

Slide 72 text

• – UIAlertView – UIActionSheet December 2, 2010 S.C. Chen @ VIPLab 72

Slide 73

Slide 73 text

December 2, 2010 S.C. Chen @ VIPLab 73

Slide 74

Slide 74 text

December 2, 2010 S.C. Chen @ VIPLab 74