This class is about defining class, memory management, and new feature, especially Property in Objective-C 2.0. 

define class is not familiar to C/C++ programmer, because its look is so different, We have to use '@interface' instead of 'class' and method cannot be in bracket, and method name and member variable's name can be equal. But it is not to hard to use. it is so easy!!. 

And memory management... it is really different from C/C++. There is global (This statement can be wrong) memory pool, called autorelease. It works by reference count (retain count) and it is not freed (dealloc) even though receive release message, if it's reference count (retain count) is not be 0. 

And property is also not familiar to me. i think is is similar with get {} / set {} in C#. it can reduce some boring code, and can be used by dot syntax. so convenient. 

Anyway, Here is my assignment 2-A

#import <Cocoa/Cocoa.h>



@interface PolygonShape : NSObject {

int numberOfSides;

int minimumNumberOfSides;

int maximumNumberOfSides;

float angleInDegrees;

float angleInRadians;

NSString* name;

}


- (void) dealloc;

- (id)init;

- (id)initWithNumberOfSides: (int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max; 

- (void) description;


@property (readwrite) int numberOfSides;

@property (readwrite) int minimumNumberOfSides;

@property (readwrite) int maximumNumberOfSides;

@property (readonly) float angleInDegrees;

@property (readonly) float angleInRadians;

@property (readonly) NSString* name;

@end



#import "PolygonShape.h"


@implementation PolygonShape


@synthesize numberOfSides;

@synthesize minimumNumberOfSides;

@synthesize maximumNumberOfSides;


- (void)dealloc

{

NSLog(@"dealloc is called. This Polygon ivar is destroyed");

[super dealloc];

}


- (void) setNumberOfSides: (int) value

{

if (value < minimumNumberOfSides)

{

NSLog(@"Invalid number of sides: %d is less than the maximum of %d allowed", value, minimumNumberOfSides);

}

else if (value > maximumNumberOfSides)

{

NSLog(@"Invalid number of sides: %d is greater than the maximum of %d allowed", value, maximumNumberOfSides);

}

else

{

numberOfSides = value;

}

}


- (void) setMinimumNumberOfSides: (int) value

{

if (value > 2)

{

minimumNumberOfSides = value;

}

else

{

NSLog(@"Invalid minimum number of sides: %d is less than the minimum of 2 allowed", value);

}

}


- (void) setMaximumNumberOfSides: (int) value

{

if (value <= 12)

{

maximumNumberOfSides = value;

}

else

{

NSLog(@"Invalid maximum number of sides: %d is greater than the maximum of 12 allowed", value);

}

}


- (id)init

{

[self initWithNumberOfSides:5 minimumNumberOfSides:3 maximumNumberOfSides:10];

return self;

}


- (id)initWithNumberOfSides: (int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max

{

[super init];

self.minimumNumberOfSides = min;

self.maximumNumberOfSides = max;

self.numberOfSides = sides;

return self;

}


- (float)angleInDegrees

{

return (180 * (numberOfSides - 2) / numberOfSides);

}


- (float)angleInRadians

{

return self.angleInDegrees * 2 * 3.14 / 360;

}


- (NSString*)name

{

NSMutableString* nameOfPolygon = [NSMutableString string];

switch (numberOfSides)

{

case 3 : nameOfPolygon = @"triangle"; break;

case 4 : nameOfPolygon = @"square"; break;

case 5 : nameOfPolygon = @"pentagon"; break;

case 6 : nameOfPolygon = @"hexagon"; break;

case 7 : nameOfPolygon = @"heptagon"; break;

case 8 : nameOfPolygon = @"octagon"; break;

case 9 : nameOfPolygon = @"enneagon"; break;

case 10 : nameOfPolygon = @"decagon"; break;

case 11 : nameOfPolygon = @"hendecagon"; break;

case 12 : nameOfPolygon = @"dodecagon"; break;

default : nameOfPolygon = @"";

}

return nameOfPolygon;

}


- (void)description

{

NSLog(@"Hello, I'm a %d-sided polygon (aka a %@) with angles of %f degrees (%f radians)", numberOfSides, self.name, self.angleInDegrees, self.angleInRadians);

}

@end



Posted by yunseong
I skipped first chapter, because it is just brief about iPhone programming (cocoa framework), and there are not much stuff to think. I can finish first assignment just followed given guide. Anyone can do it ;-)

Actually i already study about objective-c a few months back. but i cannot study with concentration, so i almost forgot everything. This class  reminds me, and i can remember what i studied ago.  And, i can use some unfamiliar class like NSEnumerator, NSURL, NSProcessInfo, so on. 

Here is assgnment 1-B.  Because these are my private, there is no comment ;-)

void PrintPathInfo()

{

NSString *path = @"~";

path = [path stringByExpandingTildeInPath];

NSLog(@"My home folder is %@", path);

NSArray *pathCompArray = [path pathComponents];

NSEnumerator *foreachEnum = [pathCompArray objectEnumerator];

NSString* item;

while (item = [foreachEnum nextObject])

{

NSLog(@"%@\n", item);

}

}


void PrintProcessInfo()

{

NSString *processName = [[NSProcessInfo processInfo] processName];

int processId = [[NSProcessInfo processInfo] processIdentifier];

NSString* outputStr = [NSString stringWithFormat: @"Process Name : %@, Process ID : '%d'",

  processName, processId];

NSLog(outputStr);

}


void PrintBookmarkInfo()

{

NSArray *keyArray = [NSArray arrayWithObjects: @"Stanford University"

@"Apple"

@"CS193P",

@"Stanford on iTunes U",

@"Stanford Mall", nil];

NSArray *strValueArray = [NSArray arrayWithObjects: @"http://www.stanford.edu",

  @"http://www.apple.com",

  @"http://cs193p.stanford.edu",

  @"http://itunes.stanford.edu",

  @"stanfordshop.com", nil];

NSMutableDictionary *bookMark = [NSMutableDictionary dictionaryWithCapacity: 5];

// c-style iteration

for (int nIdx = 0; nIdx < [keyArray count]; nIdx++)

{

[bookMark setValue: [NSURL URLWithString: [strValueArray objectAtIndex: nIdx]] forKey: [keyArray objectAtIndex: nIdx]]; 

}

NSEnumerator *keyEnum = [bookMark keyEnumerator];

NSString* key;

// Iteration with enumerator

while (key = [keyEnum nextObject])

{

NSURL *url = [bookMark objectForKey: key];

NSLog(@"Key : '%@' URL : '%@'\n", key, [url relativeString]);

}

}


void PrintIntrospectionInfo()

{

NSMutableArray *anyObjArray = [NSMutableArray arrayWithCapacity: 5];

NSString *string = [NSString stringWithFormat: @"Hello, Mac!!!!"];

NSURL *url = [NSURL URLWithString: @"http://www.apple.com"];

NSProcessInfo *processInfo = [NSProcessInfo processInfo];

NSDictionary *dic = [NSDictionary dictionary];

[anyObjArray addObject: string];

[anyObjArray addObject: url];

[anyObjArray addObject: processInfo];

[anyObjArray addObject: dic];

NSEnumerator *objEnum = [anyObjArray objectEnumerator];

NSObject *obj;

while (obj = [objEnum nextObject])

{

NSLog(@"Class Name : %@\n", [obj className]);

NSLog(@"Is member of NSString : %@", [obj isMemberOfClass: [NSString class]] ? @"YES" : @"NO");

NSLog(@"Is kind of NSString : %@", [obj isKindOfClass: [NSString class]] ? @"YES" : @"NO");

SEL sel = @selector(lowercaseString);

if ([obj respondsToSelector: sel] == YES)

{

NSLog(@"lowercaseString is '%@'", [obj performSelector: sel]);

}

else

{

NSLog(@"Responds to lowercaseString : NO");

}

NSLog(@"====================================");

}

[anyObjArray removeAllObjects];

[anyObjArray release];

}




Posted by yunseong
This section is about studying "iPhone application Programming" class which is established at Stanford University online class in iTunes U. I think this stuff is so good to study not only iPhone programming but also english. My english is not so good, so i always worry about it. This will be able to help me. Of course, i cannot understand what they say yet, but it becomes better. 

Actually, I already watch lesson 1 ~ 3, and i already finish assignments 2-1 from first one. I cannot make sure that my codes are all right, but i'll publish these code even though my codes can be wrong. 
 I hope, i can finish this class, not to be tedious. ;-). I think studying iphone programming is not press me. sometimes studying things can be burden. but i think i am really able to enjoy this ;-). it is the reason that i decide to study iPhone programming. 
Posted by yunseong
이전버튼 1 이전버튼