[iOS Dev] Array and MutableArray in Objective-C
วันนี้เราจะมารู้หนึ่งในโครงสร้างข้อมูลของภาษา Objective-C นะครับ
นั่นคือ NSArray และ NSMutableArray
ทำไมต้อง NS ??
ใบ้ให้ว่า NS == NextStep การบ้านคือลองไปหาดูว่ามันมาที่มาจากไหน ?? ^^
ไฟล์ที่เขียนจะเป็นไฟล์ .m นะครับ ซึ่งเป็น implementation file ของภาษา Objective-C
เราจะเขียนโดยใช้ Library พื้นฐานจาก Foundation.h และ Framework Cocoa นะครับ
ซึ่งสามารถนำ Code พวกนี้ไปพัฒนา iPhone Application ได้ด้วย...
ขั้นแรกเราก็ import Library ทั้ง 2 ตัวเข้ามา...
เขียนฟังก์ชั่น main พร้อมกับ สร้าง AutoreleasePool ขึ้นมาด้วย
ในส่วนนี้จะเป็นการสร้างข้อมูล NSArray ขึ้นมานะครับ... ก็เหมือน Array ในภาษาทั่ว ๆ ไปแหละครับ
[NSArray arrayWithObjects: ] เป็น Constructor ตัวหนึ่งใน NSArray Class ซึ่งจะเอาไว้กำหนดค่าให้กับข้อมูลใน Array ของเรา โดย **ข้อมูลตัวสุดท้ายจะต้องเป็น nil (ภาษาอื่นๆ คือ NULL) เสมอ
จากนั้นก็แสดงออกมาจาก Shell โดยใช้คำสั่ง NSLog (คล้ายกับ printf เลยครับ)
และสังเกตให้ดี ใน for ของเรามีการเรียกใช้ Function Count ด้วย ^^
ดังตัวอย่าง เราสร้าง NSMutableArray มาเก็บชื่อของฤดูต่าง ๆ โดยค่าเริ่มต้นผมให้มันมีแค่ 2 ฤดูไว้ก่อน
จากนั้นผมก็ Log ออกมาดูทาง Shell ก่อน... ^^
จากนั้นเราจะเพิ่มข้อมูลลงไปใน MutableArray ตัวนี้ เพราะฤดูเรายังมีไม่ครบ โดยทำได้ 2 วิธีคือ
แบบแรกคือส่ง message ว่า addObject
แบบนี้คือเราก็ addObject เข้าที่ท้ายของ Array ของเรา
ขออธิบายนิดนึง :: [receiver message]
เป็นรูปแบบการส่ง Message ให้กับวัตถุใน Objective-C คล้ายการเรียกใช้ฟังก์ชั่น (คล้าย แต่ไม่ใช่)
ส่วนแบบนี้เราจะสามารถที่จะกำหนด Index ที่เราจะ Add Object นั้นได้ ^^
จากนั้นผมก็ Log ออกมาดูทาง Shell ด้วยคำสั่ง
ก็จะได้ข้อมูลทั้งหมด 4 ตัวใน MutableArray ครบถ้วน
มีอีก Message นึงที่น่าสนใจนั่นคือ lastObject
คือการนำข้อมูลตัวสุดท้ายของ Array มาใช้งานได้ทันที ^^
**NSString คือ String ในภาษา Objective-C
อีกอย่างคือ format code ปกติภาษาอื่นเช่น C,C++ จะใช้ %s แต่ในที่นี้จะใช้ %@ แทน...
และปิดด้วยคำสั่ง
[pool drain];
เป็นการคืนหน่วยความจำซึ่งถูกชี้โดยออบเจ็กค์ชื่อ pool ด้วย Method ชื่อ drain
(ออบเจ็กค์อื่นๆส่วนใหญ่จะใช้ release)
**ในบทความนี้ไม่ได้กล่าวถึงการ "ลบ" ข้อมูลใน Array นะครับ ^^ ไว้ค่อยโพสต์แล้วกัน... ถ้าว่าง
ขอจบบทความเพียงเท่านี้ครับ ^^
นั่นคือ NSArray และ NSMutableArray
ทำไมต้อง NS ??
ใบ้ให้ว่า NS == NextStep การบ้านคือลองไปหาดูว่ามันมาที่มาจากไหน ?? ^^
ไฟล์ที่เขียนจะเป็นไฟล์ .m นะครับ ซึ่งเป็น implementation file ของภาษา Objective-C
เราจะเขียนโดยใช้ Library พื้นฐานจาก Foundation.h และ Framework Cocoa นะครับ
ซึ่งสามารถนำ Code พวกนี้ไปพัฒนา iPhone Application ได้ด้วย...
ขั้นแรกเราก็ import Library ทั้ง 2 ตัวเข้ามา...
เขียนฟังก์ชั่น main พร้อมกับ สร้าง AutoreleasePool ขึ้นมาด้วย
ในส่วนนี้จะเป็นการสร้างข้อมูล NSArray ขึ้นมานะครับ... ก็เหมือน Array ในภาษาทั่ว ๆ ไปแหละครับ
[NSArray arrayWithObjects: ] เป็น Constructor ตัวหนึ่งใน NSArray Class ซึ่งจะเอาไว้กำหนดค่าให้กับข้อมูลใน Array ของเรา โดย **ข้อมูลตัวสุดท้ายจะต้องเป็น nil (ภาษาอื่นๆ คือ NULL) เสมอ
จากนั้นก็แสดงออกมาจาก Shell โดยใช้คำสั่ง NSLog (คล้ายกับ printf เลยครับ)
และสังเกตให้ดี ใน for ของเรามีการเรียกใช้ Function Count ด้วย ^^
อ่ะ มาดูในส่วนของ NSMutableArray กันบ้าง มันต่างอะไรกับ NSArray ล่ะ
ตาม Dictionary คำว่า Mutable แปลว่า "เปลี่ยนแปลงได้" ดังนั้น
NSMutableArray ก็คือ Array ที่สามารถจะเพิ่ม ลบ เปลี่ยนแปลงข้อมูลใน Array ได้อย่างอิสระ
ดังตัวอย่าง เราสร้าง NSMutableArray มาเก็บชื่อของฤดูต่าง ๆ โดยค่าเริ่มต้นผมให้มันมีแค่ 2 ฤดูไว้ก่อน
จากนั้นผมก็ Log ออกมาดูทาง Shell ก่อน... ^^
จากนั้นเราจะเพิ่มข้อมูลลงไปใน MutableArray ตัวนี้ เพราะฤดูเรายังมีไม่ครบ โดยทำได้ 2 วิธีคือ
แบบแรกคือส่ง message ว่า addObject
แบบนี้คือเราก็ addObject เข้าที่ท้ายของ Array ของเรา
ขออธิบายนิดนึง :: [receiver message]
เป็นรูปแบบการส่ง Message ให้กับวัตถุใน Objective-C คล้ายการเรียกใช้ฟังก์ชั่น (คล้าย แต่ไม่ใช่)
ส่วนแบบนี้เราจะสามารถที่จะกำหนด Index ที่เราจะ Add Object นั้นได้ ^^
จากนั้นผมก็ Log ออกมาดูทาง Shell ด้วยคำสั่ง
ก็จะได้ข้อมูลทั้งหมด 4 ตัวใน MutableArray ครบถ้วน
มีอีก Message นึงที่น่าสนใจนั่นคือ lastObject
คือการนำข้อมูลตัวสุดท้ายของ Array มาใช้งานได้ทันที ^^
**NSString คือ String ในภาษา Objective-C
อีกอย่างคือ format code ปกติภาษาอื่นเช่น C,C++ จะใช้ %s แต่ในที่นี้จะใช้ %@ แทน...
และปิดด้วยคำสั่ง
[pool drain];
เป็นการคืนหน่วยความจำซึ่งถูกชี้โดยออบเจ็กค์ชื่อ pool ด้วย Method ชื่อ drain
(ออบเจ็กค์อื่นๆส่วนใหญ่จะใช้ release)
**ในบทความนี้ไม่ได้กล่าวถึงการ "ลบ" ข้อมูลใน Array นะครับ ^^ ไว้ค่อยโพสต์แล้วกัน... ถ้าว่าง
ขอจบบทความเพียงเท่านี้ครับ ^^
ใช้ fast enumerator ดีกว่าครับ
ReplyDeletefor(ObjectType *object in ContainerObject) {
// do something with object
}
เช่น
for(NSString *string in stringArray) {
NSLog(@"%@", string);
}
โอ้วววว ทดสอบแล้ววววว
ReplyDeleteของเล่นใหม่ ขอบคุณค๊าบบบบบ ^^
ขออนุญาติเอา Comment ไปเขียน Blog เก็บไว้เลยแล้วกันคับ อิอิ