[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 กันบ้าง มันต่างอะไรกับ 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 นะครับ ^^ ไว้ค่อยโพสต์แล้วกัน... ถ้าว่าง
ขอจบบทความเพียงเท่านี้ครับ ^^

Popular posts from this blog

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

5 TED Talk ที่จะช่วยให้คุณทำงานดีขึ้น