หลังจากเขียน basic – objective-c ได้สักพัก คิดว่าอาจจะไม่มันส์เท่าไหร่ วันนี้ลองมาเขียนเกี่ยวกับ Foundation Framework มั่งจะดีกว่า เพราะยังไงก็ต้องได้ใช้ class เหล่านี้ในการ พัฒนาโปรแกรม สำหรับ mac และแน่นอนว่า สำหรับ iPhone ด้วย
สำหรับ อย่างแรกที่จะพาลองเขียนกัน ก็คือการใช้งาน class ที่ชื่อว่า NSNumber สำหรับ class นี้จะเกี่ยวข้องกับเลขทั้งหมด เพราะว่า int ,float , longs พวกนี้เป็น basic data type มันไม่ใช่ Object และในเมื่อมันไม่ใช่ Object ก็แน่นอนว่า เราไม่สามารถส่ง message (เรียก function) ไปหามันได้ และอีกอย่างก็คือว่าจะมี class บางจำพวกที่ต้องการเก็บ เป็น Object ไม่ใช่ basic data type อย่างเช่นว่า NSArray เป็นต้นโอเคงั้นก็ดู code ตัวอย่างก่อนเลยแล้วกันว่ามันทำอะไรได้บ้าง
#import <Foundation/NSObject.h> #import <Foundation/NSAutoreleasePool.h> #import <Foundation/NSValue.h> #import <Foundation/NSString.h> int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; NSNumber *doubleNumber , *floatNumber , *intNumber; intNumber = [NSNumber numberWithInt:200]; printf("%d\n",[intNumber intValue]); floatNumber = [NSNumber numberWithFloat:500.25]; printf("%f\n",[floatNumber floatValue]); doubleNumber = [NSNumber numberWithDouble:12345e+15]; printf("%lf\n",[doubleNumber doubleValue]); if( [intNumber isEqualToNumber:floatNumber] == YES) printf("Numbers are Equal"); else printf("Numbers are not Equal"); [pool release]; return 0; }
ก็มาเริ่มที่ header กันก่อนเลย เราทำการ import ในส่วนของ Foundation Framework เข้ามาหลายตัว ส่วนที่สำคัญในตัวอย่างข้างบนก็คือ
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
ตรงส่วนนี้เป็นการจองหน่อยความจำให้กับ autoreleasepool เหตุผลก็เพราะว่าในถ้าโปรแกรมเราเรียกใช้ foundation class ทั้งหลายเราจำเป็นต้องมี autoreleaspool เนื่องจากว่ามันช่วยอำนวยความสะดวกในการจัดการ memory ของระบบ คือหลังจากที่เรามี autoreleasepool แล้วทุก object จะถูกส่งเข้ามายัง pool ที่เราสร้างขึ้นเพื่อที่ว่าตอนปิดโปรแกรม มันจะได้มาดูว่าใน pool มีอะไรอยู่และจะทำการ release object ใน pool เพื่อคืนหน่วยความจำ และตอนก่อนปิดโปรแกรมก็อย่าลืมเรียก release
เอาละ เราได้ประกาศตัวแปร มาหลายตัวเป็นต้นว่า doubleNumber แล้วก็ทำการใส่ค่าให้มันโดยการเรียก numberWithDouble แล้วก็ลองแสดงค่าผลลัพธ์ของแต่ละตัวแปรออกมา ก็เป็นอันจบ จะมีที่แปลกๆหน่อยก็คงจะเป็น isEqualToNumber สำหรับ method นี้ก็เป็นการเปรียบเทียบว่าเลขสองตัวนี้มันเท่ากันหรือไม่
คิดว่า code ไม่น่ายากน่ะ ถ้าเอาไป compile แล้ว run ดูก็จะได้ผลลัพธ์ แบบนี้
200
500.250000
12345000000000000000.000000
Numbers are not Equal
หลายคนอาจจะบอกว่าทำไมไม่ประกาศเป็น int , float ซะก็น่าจะใช้ได้เหมือนกัน จริงๆก็ใช้ได้ครับ แต่ว่าขอเน้นย้ำว่า NSNumber มันเป็น class น่ะ ไม่ใช่ basic data type จุดประสงค์ของผมก็คือ ต้องการประกาศ object แล้วเดี๋ยวเราจะได้ใช้ประโยชน์ร่วมกับ Foundation class ตัวอื่นๆอีก
สำหรับตัวอย่าง Source Code ก็โหลดได้ที่นี่ครับ
Download Foundation Framework I (NSNumber) Source Files


