Posts Tagged Cocoa Touch Programming
iPhone Train Center
ตอนนี้เห็นหลายๆคนถามผมว่า “รับ Train เขียน App บน iPhone มั้ยครับ” ซึ่งถ้าเป็นเมื่อก่อน(ที่ยังไม่ได้ทำงานประจำ)ก็คงจะรับ Train อยู่ แต่ตอนนี้ทำงานประจำแล้ว ก็คงต้อง “จำใจไม่รับ Train นะครับ” ต้องขออภัยจริงๆ เอาเป็นว่าผมเองก็คงช่วยได้จากการเขียนโพสเป็นหัวข้อใน Blog นี่ละกันนะครับ มีปัญหาอะไรก็โพสเข้ามาถามกัน จะพยายามช่วยหาคำตอบมาให้นะครับ อ้อ ถามใน www.i-gee.co.cc นะครับ เวบนั้นผมอยากให้มันเป็นศูนย์รวม iPhone Dev จริงๆ(ส่วนเรื่อง url ไว้จะเปลี่ยนมันทีหลังนะครับ)
จากหัวข้อเรื่อง ก็คือตอนนี้ถึงผมจะไม่ได้รับ Train iPhone Programming แต่ตอนนี้ก็มีที่ที่รับ Train นะครับ คือที่ทรู ตอนนี้เริ่มเปิด Training สำหรับผู้สนใจพัฒนา App บน iPhone แล้วนะครับ รายละเอียดดูได้ที่ http://www.trueappcenter.com/ โดยสิ่งที่ต้องมีคือ Mac (จริงหรือเถื่อนก็ได้ครับ) กับความรู้เรื่อง Objective-C สำหรับคนที่อยากได้ Training Course ถ้าสนใจก็ลองติดต่อไปทางทรูได้ครับ
ส่วนใครอยากศึกษากับผมก็ Train กันผ่าน Blog ก็แล้วกันนะครับ :P
Add comment มิถุนายน 24, 2009
iPhone Development – View, Drawing
สำหรับ Entry นี้อาจจะพูดถึงส่วนของ View ใน iPhone นะครับ ซึ่งอยู่ใน Lecture ที่ 5 ของ stanford course ซึ่งจะกล่าวถึงคลาส UIView ของ iPhone, การใช้เครื่องมือสำหรับการวาดอย่างง่ายครับ
ไม่แน่ใจว่ามันจะก้าวกระโดดไปนิดรึเปล่า เอาเป็นว่า Entry นี้ผมจะหลักเลี่ยงการโค้ดนะครับ เริ่มกันที่ View นะครับ
ส่วนที่เป็น View คือส่วนที่เป็นสี่เหลี่ยมผืนผ้าตรงหน้าจอนั่นแหละครับ ทั้งหมดเลย ซึ่งภายใน View จะมีการทำงาน 2 อย่างอยู่ด้วยกัน คือ ส่วนของ Content และ Event
Content ก็คือตัวอักษร, รูปภาพหรือสิ่งที่ถูกวาดขึ้นบนจอภาพนั่นเองครับ ใน View แต่ละหน้าจะมี View หลักตัวหนึ่ง(เทียบตาม Tree ก็เป็น Root) เราเรียกว่า Superview ครับ ภายใน Superview ก็จะมี View ย่อยๆ เรียกว่า Subview ถ้านึกไม่ออกว่าเป็นไง ก็ลองนึกถึงกระดานปักหมุด(Superview)ที่มีกระดาษ(subview)แปะอยู่แล้วกันครับ ส่วน Event คือเหตุการณ์ที่เกิดขึ้นบนหน้าจอนั่นเองครับ ไม่ว่าจะเป็นการ Tab, การ Scroll ฯลฯ ทั้งหมดที่จะสั่งการให้ iPhone ทำงานได้ ถือเป็น Event หมด
เนื่องจาก View เป็นการวาดรูปภาพขึ้นมาบนส่วนของ Content ดังนั้นโครงสร้างต่างๆที่เกี่ยวข้องกับ View ก็เป็นเกี่ยวกับการวาดเช่นกัน ได้แก่ CGPoint หมายถึง ตำแหน่งที่อยู่(x,y) ,CGSize หมายถึง ขนาด(Width, Height) และ CGRect หมายถึงกรอบ(CGPoint, CGSize) ลักษณะ Coordinate ของ iPhone จะไม่เหมือนกับพิกัดการวาดรูปทั่วๆไปครับ จุด origin จะอยู่ที่มุมซ้ายบน (จากปกติมักจะอยู่ซ้ายล่าง)
เกี่ยวกับการวาดนั้น การอ้างอิงพิกัดหรือพ้ืนที่สำหรับวาด จะมีอยู่ 2 แบบ คืออ้างอิงจาก Frame และอ้างอิงจาก Bound ทั้งสองแบบแตกต่างกันตรงที่ “มันเป็นตำแหน่งเมื่อเทียบกับขอบกระดานปักหมุกหรือเทียบกับขอบกระดาษที่แปะ” ถ้า Frame คือเมื่อเทียบกับขอบกระดานปักหมุด แต่ถ้า Bound ก็เทียบกับกระดาษบนกระดานปักหมุด ถ้ายังไม่เข้าใจลองดูที่สไลด์ที่ 19 ก็อธิบายได้ชัดเจนดีครับ มีคำแนะนำอยู่นิดหน่อย (อยู่ในสไลด์ที่ 20) เกี่ยวกับการใช้งาน Frame และ Bound
สิ่งที่อยู่เหนือกว่า Superview คือ Window แต่ละ App จะมี 1 Window และ Window มักจะถูกจัดการมาให้เราใน template เรียบร้อยแล้ว
ส่วนเรื่องของการโค้ด มีตัวอย่างอยู่ใน สไลด์ที่ 25-27 นะครับ ไม่ขอเอามาเขียนซ้ำนะครับ แล้วก็คิดว่าโค้ดไม่น่าจะยากอะไรด้วย แต่ถ้าสงสัยก็โพสถามเอาละกันนะครับ
ต่อไปเรื่องของการ Drawing ครับ
การ Drawing ลงไปบน Content View นั่น จะทำโดยการ override คำสั่งการวาดไปในฟังก์ชั่น Drawrect ครับ แต่การสั่งให้ Draw จะไม่ได้ใช้วิธีการเรียกฟังก์ชั่น Drawrect ครับ แต่จะใช้คำสั่ง setNeedDisplay แทน งงมั้ยครับ? ลักษณะนี้เรียกว่า “Lazy Loading” ครับ view ของเราจะไม่ถูกวาดอยู่ตลอดเวลา แต่วาด(ตามที่สั่งใน drawRect)แค่เฉพาะตอนที่สั่ง(ว่า setNeedDisplay)เท่านั้น
เครื่องมือเกี่ยวกับการวาด จะเป็น Core Graphics และ Quartz 2D ทั้งสองตัวที่กล่าวถึงเป็น Graphic Library บน Cocoa ครับ ใช้โดย Library นี้เป็น C-Base API นะครับ ไม่ใช่ Objective-C ส่วนวิธีการวาดอย่างละเอียดนั้น คงไม่ขอพูดถึงในที่นี้ เพราะจะยาวจนเกินไปครับ(รวมทั้งอยากหลีกเลี่ยงการ Coding ใน Entry นี้ไปก่อนด้วย) คงจะมาอัพเดตในคราวหน้า แต่ถ้าสนใจก็ดูในสไลด์ก่อนก็ได้ครับ ใน Entry นี้ไว้เท่านี้ก่อนครับ
Add comment มีนาคม 23, 2009
Objective – C Custom Class
ก่อนอื่นขอบอกก่อนนะครับ ว่าหลังจากนี้ ผมจะอิงเนื้อหาจาก CS193P ของ Stanford มาเขียนเป็นบทๆ (เพราะถ้าตั้งหัวข้อเขียนเอง ท่าทางจะงง และจะไม่ครบถ้วน) ถ้าอยากดูสไลด์ประกอบก็ตามในเวบของ CS193P เลยนะครับ
จากก่อนหน้านี้ ผมอธิบายคร่าวๆเกี่ยวกับสิ่งต่างๆที่ต้องรู้ และในหัวข้อ Objective-C ก็อธิบายไว้คร่าวๆเหมือนกัน Entry นี้จะมาเจาะลึกกันซักหน่อย โดยจะเริ่มกันที่เรื่องของ Custom Class ของ Objective-C
ในการสร้าง Custom Class ใน Objective-C ไฟล์ที่ได้จากการสร้าง New Class จะมี 2 ไฟล์ คือไฟล์ .h และ .m
- ไฟล์ .h จะเป็น Header ไฟล์ ที่กำหนดลักษณะทั้งหมดของคลาส ว่า Class Name ชื่ออะไร มี Attribute และ Method อะไรบ้าง นอกจากนั้นยังเป็นส่วนที่กำหนดการเชื่อมต่อกับ Interface Builder ด้วย ลักษณะก็จะเป็นแบบนี้
#import <Foundation/Foundation.h> // import เหมือนกับคำสั่ง include ของ C/C++
@interface ClassName : NSObject {
// Attribute ของ Class : เขียนเหมือนภาษา C ครับ
// Syntax: datatype varName
id attr1;
NSString *attr2;
…
}
// Methods Header : คล้ายๆกับภาษา C เหมือนกันครับ ต่างกันนิดหน่อย
// Syntax: -/+ (returnDatatype)MethodName:(ParameterDatatype)parameterName;
- (void)setAttr2:(NSString *)aValue;
- (Nsstring *)attr2;
@end
- ไฟล์ .m เป็นส่วนของการ Implement Method ของคลาสทั้งหมด ลักษณะก็ประมาณนี้
#import “headerFile.h”
@implementation ClassName
- (void)setAttr2:(NSString *)aValue {
attr2 = aValue;
}
- (NSString *)attr2 {
return attr2;
}
@end
ครับ จากตัวอย่างเป็นการสร้าง Class ที่มี Method Getter กับ Setter นะครับ ต่อไปก็จะเป็นการสร้าง Object, Memory Management และการ ลบ Object นะครับ เริ่มต้นที่การสร้าง Object
การสร้าง Object มีสองขั้นตอนคือ การจองพื้นที่ และ การกำหนดค่าตั้งต้นของ Object ซึ่งรูปแบบมีดังนี้
ObjectClass *ObjectName = [[ObjectClass alloc] init];
การกำหนดค่าตั้งต้นอาจจะมี Parameter อื่นๆได้ด้วย ในกรณีตัวอย่างหมายถึง Default การกำหนดนี้ จะเกี่ยวข้องกับ Memory Management ตรงที่ Object ที่ถูกประกาศ จะมี retain count เป็น 1 หมายความว่า ตราบใดก็ตามที่ Object ตัวนี้ยังมีค่า retain count เป็น 1 หมายความว่า object ตัวนี้จะยังคงอยู่ในหน่วยความจำไปเรื่อยๆ ถ้าเราต้องการลบ Object ตัวนี้เราก็ทำได้โดยการใช้คำสั่ง Release แบบนี้ครับ
[ObjectName release];
ซึ่งจากข้างต้น ให้พูดง่ายๆก็คือ malloc กับ free ในภาษา C นั่นแหละครับ
แล้วก็อย่างที่บอกก่อนหน้านี้ครับ หลังจาก Mac OS X ออกมาเป็นเวอร์ชั่น 10.5 Leopard สิ่งที่คลานตามออกมาด้วยกัน คือ Objective-C 2.0 หลักๆก็มีสามอย่างอย่างที่เคยบอกนะครับ แต่Entry นี้จะเน้นเรื่อง Property แค่เรื่องเดียว เพราะเป็นเรื่องสำคัญใน iPhone Development เลยทีเดียว
Property เป็นสิ่งที่เข้ามาช่วยกำหนดคุณลักษณะของ Attribute ของ Class ของเราครับ ว่ามันอยู่ในหน่วยความจำอย่างไร Access ค่าแบบไหน ถามว่ามันจะรู้ไปทำไมว่าอยู่ในหน่วยความจำอย่างไร (retain, assign, copy) ก็เพราะฟีเจอร์เกี่ยวกับ Garbage Collector ส่วนเรื่อง Access ค่าอย่างไร (readwrite, readonly) ก็เป็นเรื่องที่เกี่ยวกับการใช้งานฟีเจอร์สร้าง Method Getter/Setter อัตโนมัติของ Property เอง (มันจะสร้างแบบไหนก็เกี่ยวกับมันอยู่ในหน่วยความจำอย่างไรเช่นกัน)
ส่วนว่าแต่ละอย่างมันหมายความว่ายังไงบ้าง ก็หมายความอย่างนี้ครับ
retain – Attribute นั้นถูกประกาศขึ้นโดย retain Count เป็น 1 Value เป็น default
assign – Attribute นั้นเป็น Pointer ชี้ไปที่ Attribute อื่นอีกทีนึง
copy – Attribute นั้น Access ค่าโดยการ Copy ค่ามาจากที่อื่น แต่ไม่ได้เพิ่ม retain count ขึ้นมาด้วย
readonly, readwrite – เป็นตัวกำหนดการ Access Attribute ว่าให้อ่านอย่างเดียวหรือเขียนได้ด้วย
ซึ่งตัวอย่างการใช้งานก็จะเปลี่ยนจากตัวอย่างด้านบนมาเป็นลักษณะนี้ครับ
#import <Foundation/Foundation.h>
@interface ClassName : NSObject {
id attr1;
NSString *attr2;
}
@property id attr1;
@property Nsstring *attr2;
@end
ไฟล์ Implement
#import “headerFile.h”
@implementation ClassName
@synthesis attr1;
@synthesis attr2;
@end
จะเห็นว่า Method Getter/Setter หายไปและแทนที่ด้วยการกำหนด property แทน และในส่วนของ implement ก็แค่ใช้คำสั่ง @synthesis <#attribute> เพื่อให้มันสร้าง Method Getter และ Setter ขึ้นมา สั้นและง่ายขึ้นเยอะเลยใช่มั้ยครับ
ส่วนเรื่องการใช้งาน จะใช้ dot syntax เข้ามาแทนการเข้าถึง attribute ที่กำหนด property ครับ ลักษณะก็เป็นแบบนี้ (ใช้ class จากตัวอย่างข้างต้น)
objectExample.attr2 = @”test String”; // อันนี้เป็นกรณี Setter method
NSLog(@”%@”, objectExample.attr2); // อันนี้เป็นกรณีของ Getter method
ไม่ยากเกินไปใช่มั้ยครับ เกี่ยวกับเรื่องของ Custom Class ใน Objective-C สำหรับเนื้อหา Entry นี้อ้างอิง CS193P : Chapter 3 Custom Class นะครับ อยากดูสไลด์ก็ไปดูได้ (แต่ผมไม่ได้ทำหรอกนะ) เข้าใจไม่เข้าใจยังไงก็ติชมได้ครับ สำหรับบทนี้ขอจบเท่านี้ครับ
2 comments มีนาคม 6, 2009
Cocoa & iPhone Development : Objective – C
ขออภัยที่หายไปนาน เนื่องจากเดือนนี้ ง่วงอยู่กับการอ่านหนังสือ iPhone อยู่ (แถมได้ E-book มาอีกเล่ม) เร็วๆนี้คงได้มา Review กันหลายเรื่องแน่นอน (ขอบอกไว้ก่อนว่า เล่มที่อ่านอยู่เจ๋งเอาเรื่องเลยทีเดียว)
เนื่องจากกลัวว่าจะลืมกัน บวกกับกลับมาลับ Basic กันนิดหน่อย เลยเบรคเรื่องอ่านหนังสือมาเขียนบลอกนิดนึง เริ่มเลยละกัน
…อย่างที่สามในการพัฒนา iPhone Application คือ “ภาษา” นั่นเอง ปัจจุบันแม้ว่าจะใช้ภาษา Native อื่นๆในการพัฒนา App บน Mac ได้มากมาย ไม่ว่าจะเป็น Java (ได้นานแล้ว), Python, Ruby ฯลฯ แต่โดยหลักแล้ว ภาษาหลักที่ใช้ในการพัฒนา App บนแมค และโดยเฉพาะ iPhone มีแค่ภาษา Objective-C เท่านั้น
Objective-C เป็นภาษา C ที่ถูกเอามาพัฒนาให้รองรับแนวคิดแบบ Object-Oriented แท้ๆ ย้ำว่าแท้ เพราะไม่เหมือนภาษา C++ ที่เป็น Object-Oriented ไม่แท้ (C++ มีคุณสมบัติของ OOP ไม่ครบถ้วน อาจค้านความคิดของหลายๆคนนะครับ ว่ามันไม่แท้ได้ไง ถ้าให้แจงกันใน Entry นี้คงหลุดประเด็นเกินไป ดังนั้นจะไม่พูดถึงนะครับ) เพราะฉะนั้น ลักษณะโครงสร้างและ Syntax ของ Objective-C จึงเหมือนกับภาษา C ซะเป็นส่วนมาก สไตล์การเขียนจึงเป็นแบบ Sequence Programming รวมถึง Library ของภาษา C ก็นำมาใช้ได้เลย แบบไม่ต้องเปลี่ยนแปลงอะไร (ถ้าเป็น Standard Library)
แต่สิ่งที่เพิ่มเข้ามา คือลักษณะ Syntax ที่แตกต่างในบางเรื่อง ที่เห็นหลักๆก็ส่วนเกี่ยวกับ Object และ Class การประกาศและการใช้งานคลาส ที่ไม่เหมือนกับของภาษา OOP แบบอื่นๆ ที่มีการใช้ “.” ในการแทน Method ที่เรียกใช้ แต่ Syntax ของ Obj-C จะใช้ “ปีกกา ( [] )” แทนการเรียกใช้ Method ของ Object ตัวอย่างเช่น
id testString = [NSString stringWithString:@"Test String"];
จากตัวอย่าง จะเห็นว่า NSString เรียกใช้ method “stringWithString” โดยมีค่่า Parameter เป็นข้อความว่า Test String แบบนี้เป็นต้น
จะเห็นว่า Syntax แบบนี้ค่อนข้างจะเรียบร้อยและอ่านเข้าใจง่ายกว่า Syntax แบบจุด มากกว่าเยอะ
เรื่องของชนิดข้อมูล (Datatype) ก็เช่นกัน Obj-C มีชนิดข้อมูลทั้ง Static และ Dynamic ที่สำคัญคือ Datatype แบบ Dynamic เพราะเป็นองค์ประกอบสำคัญของหนึ่งในคุณสมบัติของ OOP ข้อที่ชื่อว่า “Polymorphism” (ซึ่ง C++ ไม่มี) ซึ่งตัวแปรแบบ Dynamic Datatype ของ Obj-C คือ Datatype ชนิดที่ชื่อว่า “id” ดังตัวอย่างข้างต้น จากตัวอย่างหมายความว่า “ถ้า Value ด้านหลัง เปลี่ยน Class เป็นชนิดอื่นที่ไม่ใช่ NSString ตัวแปร testString ก็เป็น Object ของ class นั้นได้โดยไม่ต้องเปลี่ยนชนิดข้อมูล” DataType ชนิดนี้ ต่อไปเราจะได้เห็นกันบ่อยๆครับ
การจัดการ Memory ใน Obj-C ก็เป็นเรื่องสำคัญ ลักษณะของการจัดการ Memory ของ Obj-C คือการ Retain Count ขอยกตัวอย่างจากในหนังสือของ Aaron ละกันนะครับ ว่ามันเหมือนกับเราจูงหมาน่ะครับ ถ้าหมาของเรามีเชือกจูงอยู่ 2 เส้น ก็เหมือนกับตัวแปรตัวนั้นถูกเชื่อมการทำงานอยู่กับ 2 component ตัวแปรนั้นก็จะยังไม่ถูกคืนความจำ และเมื่อใดที่คนจูงทั้งสองคนปล่อยเชือกจูง หมาก็มีอิสระ ก็เหมือนกับ Component ไม่มีการใช้งานตัวแปรนั้นแล้ว ก็จะทำการคืนหน่วยความจำให้เครื่องนั่นเอง
ข้างต้นเป็นสิ่งที่อยู่ใน Objective-C 1.0 นะครับ แต่หลังจาก Mac OSX Leopard ถูกปล่อยออกมา Objective-C ก็เพิ่ม Version ขึ้นมาด้วย เป็น 2.0 สิ่งที่เพิ่มขึ้นมาก็มีอยู่ 3 อย่างใหญ่ๆ (ที่จริงเคยเขียนไว้ในนี้แล้ว)
1. Fast Enumerate เป็นการวนลูปใน Array แบบใหม่ ที่สั้นลง เร็วขึ้นง่ายขึ้น ลักษณะคล้ายๆกับการวนลูปในภาษา Ruby เจ๋งมากครับอันนี้
2. Garbage Collector เป็นระบบจัดการ Memory แบบใน Java ชาว Cocoa ก็ได้เฮ แต่ Cocoa Touch คงต้องจ๋อยกันไป เพราะ iPhone ไม่ Support Garbage Collector ครับ
3. Property List ลักษณะของการกำหนดคุณลักษณะของ Attribute ของ Object แบบใหม่ ที่ช่วยให้เรากำหนดคุณลักษณะและค่าของตัวแปร ได้ง่ายขึ้นด้วยโค้ดที่สั้นลง แต่อันนี้ดีอย่างเสียอย่างครับ ข้อดีคือโค้ดสั้นลงเยอะเหมือนกัน แต่ข้อเสียคือ เราต้องกลับไปใช้ Syntax แบบจุดกัน อันไหนใช้จุดอันไหนใช้ปีกกา มือใหม่ได้งงกันน่าดูหล่ะครับ ซึ่งข้อนี้ ต่อไปจะได้เจอกันเยอะเลย ส่วนเรื่องของ Property List ถ้าอยากรู้ตอนนี้เลยก็ลองเข้าไปอ่านของเวบ mac’feteria เอาก่อนได้เลย พี่เขาเขียนไว้ดีมากครับ
สิ่งที่แตกต่างระหว่าง C และ Obj-C ที่จะพูดถึงใน Entry นี้ ก็จะขอเขียนไว้เท่านี้ก่อน(เพราะยังนึกไม่ออก แหะๆ) รายละเอียดลึกๆอื่นๆคงได้เขียนเพิ่มตอนหลัง หรืออธิบายในบทถัดๆไป ในบทนี้ไว้เท่านี้ก่อนนะครับ ;)
7 comments กุมภาพันธ์ 27, 2009
iPhone Web Application Development
ขออภัยที่ห่างหายไปจาก Blog ประมาณครึ่งเดือนเห็นจะได้ ช่วงนี้ยุ่งๆอยู่กับการอ่านหนังสือ iPhone Development อยู่ครับ เล่มที่อยู่ใน Section “Reading Book” นั่นละครับ น่าสนใจมากๆนะครับ เหมาะสำหรับผู้เริ่มต้นศึกษาตั้งแต่เริ่มเลยเหมือนกัน แต่สำหรับคนที่เรียนกับ CS193P ของ Stanford มาก่อนอาจจะมีอาการงงๆบ้าง ไม่รู้จะเชื่ออะไรดี รวมถึง Style การ coding ที่ไม่เหมือนกับหนังสือ Cocoa Programming ของ Aaron Hillegass ซักเท่าไหร่ (แต่โดยส่วนตัวผมรู้สึกว่าการ Coding ในหนังสือเล่มนี้จะลักษณะคล้ายกับงานจริงนะครับ พูดง่ายๆคือ ดูซับซ้อนกว่า แต่ประสิทธิภาพสูงกว่า) ชอบแบบไหนถนัดแบบไหนก็ว่ากันไปนะครับ แบบไหนดีไม่ดีก็มาแชร์ไอเดียกัน
ส่วนที่มาแว่บมาเขียนเนี่ย เนื่องจาก comment ของ sup98 ที่เข้ามาแนะนำเกี่ยวกับ iPhone Web Application Development ครับ ขอบคุณมากๆเลยที่เข้ามาแชร์กัน เกี่ยวกับเครื่องมือที่ชื่อ Eclipse ทำงานบน Windows ซะด้วย เท่าทีดู เป็นเครื่องมือพัฒนาเวบที่ใช้ CSS ที่มีลักษณะแบบ iPhone มาใช้ นั่นเอง ลักษณะของเครื่องมือแบบนี้เท่าที่ผมรู้จักอีกตัวนึงก็คือ IUI CSS ครับ เป็นโปรเจคที่มีมานานแล้วตั้งแต่ปีที่แล้วครับ ไม่แน่ใจว่า Eclipse ตัวนี้คือ Tool ที่เอา IUI มาใช้หรือว่ามี CSS ตัวอื่นที่เป็นของตัวเอง
ปัจจุบันก็มีหลายโปรเจคที่พัฒนา Application เพื่อรันบน iPhone โดยการเอา CSS มาแปะ เท่าที่เคยเห็น บางตัวก็ดี บางตัวก็รู้สึกขัดกับการใช้งาน แต่ที่เหมือนกันคือ “ใช้งานได้แค่การ Tap เบื้องต้นเท่านั้น” หมายถึงการคลิกธรรมดาๆเท่านั้น ไม่สามารถใช้ความสามารถ Multitouch ได้อย่างเต็มที่ อันนี้คือเท่าที่ผมเห็นเท่านั้นนะครับ ซึ่งก็ไม่ได้เห็นมาเยอะด้วย จริงๆอาจจะมีก็ได้ (ถ้ามีก็ช่วยแนะนำมาด้วยนะครับ) ส่วนข้อดีของการพัฒนาแบบนี้ คงจะเป็นเรื่องของ Platform นั่นแหละครับ
เมื่อไม่นานผมได้ยินเกี่ยวกับ iPhone Web Application Development อีกตัวนึง คือ “iPhone On Rails” ไม่ต้องบอกก็พอจะรู้นะครับว่าใช้อะไรเป็น Web Framework เท่าที่พอดูก็ช่วยให้ง่ายขึ้นเยอะ (ถึงจริงๆแล้วมันก็ไม่ได้ยากอะไรการเรียก Web Service บน Rails เนี่ย)แต่ก็ช่วยให้ง่ายขึ้นเยอะ และโค้ดคงสวยกว่าเดิมเยอะเหมือนกัน แต่โดยส่วนตัวคือ ไม่เชี่ยวชาญ Ruby on Rails เลย ถ้าใครสนใจหรือมีความรู้เกี่ยวกับเรื่องนี้ก็ช่วยมาแนะนำกันบ้างนะครับ จะดีมากๆเลย
Add comment กุมภาพันธ์ 20, 2009
Cocoa & iPhone Development : แนะนำแหล่งเรียนรู้เพิ่มเติม
ตอนนี้ การพัฒนาแอพพลิเคชั่นบน iPhone เป็นที่สนใจสำหรับหลายๆคน และผมก็เป็นคนหนึ่งและก็เขียนบทความเกี่ยวกับการพัฒนาบนแมคอยู่ที่นี่มา ที่มานั่งเขียน Entry ต่างๆก็เพราะตัวผมเองก็มีประสบการณ์กับเรื่องพวกนี้ประมาณ 2 ปีแล้ว พบว่า “แทบจะไม่มีบทความเกี่ยวกับการพัฒนาบนแมคที่เป็นภาษาไทยเลย” เท่าที่เสิร์ชเจออยู่สองที่ คือ ที่นี่ กับ แมคเฟทีเรีย ที่พูดถึงการพัฒนาบนแมคเป็นหลัก นอกนั้นอาจมีแค่ประปราย
แล้วผมไปศึกษาจากที่ไหนบ้าง ก็จะเอามาเขียนใน Entry นี้นะครับ บางที่อาจจะเคยโพสไว้ใน Entry เก่าๆ และบางอันอาจจะใหม่กิ๊งประมาณว่าเพิ่งเจอเมื่อไม่กี่วันนี้เอง คิดว่าน่าจะมีประโยชน์เหมือนกัน (อย่างน้อยก็กับคุณเป้นะครับ อิอิ ตามกันมาทุก Entry เลยทีเดียว)
1. Mac’Feteria Website : เวบไซต์เกี่ยวกับการพัฒนาบน iPhone อีกที่นึงที่เป็นภาษาไทย เท่าที่ผมเจอของคุณ ter (ที่จริงผมคิดว่าเคยเจอพี่เขาแล้วนะครับ ที่ VizRT คิดว่าไม่น่าผิดคน) เวบนี้ก็แบ่งเนื้อหาเป็นบทๆเรื่องๆเหมือนกันกับที่นี่ ตอนนี้เนื้อหาก็ยังเป็นส่วนของการเริ่มต้นเช่นกัน แต่เนื้อหาจะลงลึกไปถึง Coding เลย ลองเข้าไปสกรีน ไปดูคร่าวๆก่อนก็ได้ครับ เข้าใจมั่งไม่เข้าใจมั่ง เคยเห็นก็ยังดีแหละครับ
ลองเข้าไปดูที่ http://www.macfeteria.com
2. หนังสือ Cocoa Programming for Mac OS X – Aaron Hillegass : เล่มนี้เคยแนะนำไปแล้ว และก็จะขอแนะนำอีกที เล่มนี้คือ Bible สำหรับการพัฒนาบนแมคจริงๆครับ ผมก็เริ่มจากเล่มนี้แหละ ไม่เคยอ่านก็ต้องไปหามา ไม่ซื้อก็โหลดแหละครับ หาไม่ยากเลย (แต่แนะนำให้ซื้อ) ตอนนี้ออก 3rd Edition แล้ว เนื้อหาครอบคลุม Objective-C 2.0 และมีการใช้งาน Instrument Debugger ด้วย ห้ามพลาดครับเล่มนี้
3. Hot Cocoa Screencast – Thomas Vinck : อันนี้เพิ่งเจอเมื่อไม่กี่วันนี้เองครับ Screencast สอนการพัฒนาแอพพลิเคชั่นด้วย Cocoa Framework เนื้อหาเข้าใจง่าย ภาพคมชัดคุณภาพ HD และที่สำคัญ ฟรีครับ ไม่มีค่าใช้จ่าย ตอนนี้เนื้อหาเพิ่งอยู่บทที่ 9 ลองเข้าไปดูกันครับ วิธีก็คือใช้โปรแกรม iTunes ครับ เข้าไปที่ iTunes Store แล้วก็เสิร์ชเอาเลย ว่า Hot Cocoa แล้วก็ Subscribe เอาได้เลย
4. CocoaCast – Boris Klaydman : อันน้ีก็ Screencast เหมือนกันครับ เคยเข้าไปดูนานแล้ว แล้วไม่ได้ดูต่อ ดีเหมือนกันครับ ตอนนี้ไม่รู้ไปถึงไหนแล้ว แต่ก็แนะนำไว้อีกที่ครับ วิธีการเข้าไปดูก็เหมือนกับอันบนครับ search ว่า cocoacast
5. iPhoneDevCentral.org website : เวบนี้ก็ดีครับ เป็นที่รวมทั้ง Article Tutorial และ Screencast Tutorial และ Forum ต่างๆด้วย แถมแบ่งระดับให้อีกตะหาก เวบนี้ต้องลองครับ
6. iPhone Developer’s Cookbook – Erica Sadun : เล่มนี้เคยแนะนำใน Entry เก่าแล้วครับ ไม่เหมาะสำหรับมือใหม่เท่าไหร่ แต่ก็เป็น ตัวอย่างโค้ดสำหรับมือใหม่ได้ ส่วนมือที่ไม่ใหม่แล้วก็ได้ประโยชน์ดีครับ ทำอะไรเป็นขึ้นอีกเยอะเลย เล่มนี้ออกตั้งแต่ตุลาคมปีที่แล้วแล้วครับ ไปหาซื้อหาอ่านเอาเองได้ตามสะดวกครับ (มีให้โหลดแล้วนะครับ แต่ต้องหากันเองนะครับ)
7. Begining iPhone Development : Exploring iPhone SDK -Dave Mark & Jeff LaMarche : เล่มนี้ครับ ของใหม่มาแรง ผมเองก็เพิ่งได้มาเมื่อต้นมกราคม คิดว่าเล่มนี้น่าจะเป็นเล่มที่สมบูรณ์มากเล่มนึงเท่าที่ตอนนี้มี (ตอนนี้มีสองเล่ม เหอะๆ) เล่มนี้น่าจะเหมาะกับการเริ่มต้นศึกษาใหม่ๆ เพราะไม่ยากเกินไป (เล่มนี้หาโหลดได้อีกแล้วเช่นกัน)
8. Stanford CS193P Course : Course iPhone Development ของมหาลัย Stanford ครับ เปิดให้เข้าไปดู Slide ได้ฟรี (แต่ดู Video ไม่ได้ แย่จัง) เนื้อหาประมาณ 20 บทครับ มีประโยชน์ล้วนๆ!! และขอแนะนำแบบสุดๆให้ไปลองอ่านกันดู (แล้วจะเข้าใจว่าทำไมฝรั่งมันเก่งกันนัก)
ลิงค์อยู่ที่นี่ครับ : CS193P Cocoa programming Course
ทั้งหมดนี้ก็เป็นแหล่งข้อมูลหลักๆที่ผมใช้ศึกษาทั้งที่ผ่านมาและปัจจุบันนะครับ แนะนำกันไว้เผื่อจะสนใจไปลองดูกัน แทบทั้งหมดเป็นภาษาอังกฤษนะครับ อยากให้ทำใจและอย่าไปกลัวกับเรื่องภาษา อันที่จริงผมก็ไม่ได้เก่งภาษาอังกฤษเลย (ดูจากที่แปล Entry เป็นภาษาอังกฤษก็รู้) และถ้าอยากให้มีเวบแบบนี้เป็นภาษาไทยเยอะๆ ก็ช่วยกันอ่าน ช่วยกันแปล ช่วยกันแชร์ข้อมูลนะครับ
12 comments กุมภาพันธ์ 2, 2009
Cocoa & iPhone Developement : OOP
เรารู้จักอย่างแรกที่ต้องรู้ในการพัฒนา Application บน iPhone กันไปแล้ว คือ MVC Design Pattern จาก Entry ก่อนหน้านี้ ใน Entry นี้ เราจะคุยกันถึงเรื่องพื้นฐานที่สุดอีกเรื่องหนึ่งในการโปรแกรมมิ่งในปัจจุบัน ซึ่งก็คือเรื่องของ Object-Oriented Programming
เรื่องนี้อาจเป็นเรื่องที่หลายๆคน โดยเฉพาะนักเรียน CS เคยเรียนกันมาแล้ว แต่เท่าที่ผมทราบ หลายคนเข้าใจว่า “OOP คือการเขียนโปรแกรมแบบ Object โดยการเขียนโปรแกรมให้อยู่ใน Class” แล้วก็เขียนโปรแกรมด้วยแนวคิดเดิมแบบ Procedural เหมือนกับที่เขียนในภาษา C, Pascal เป็นต้น ทั้งที่จริงแล้วมันก็คือ Object ของ Main Program ตัวเดียวเท่านั้นเอง
กำลังเข้าใจ OOP อย่างที่กล่าวอยู่ข้างต้นรึเปล่าครับ ? ดังนั้น OOP ใน Entry นี้ อาจไม่เหมือนที่เราเคยเรียนนะครับ เริ่มเลยดีกว่า
ส่วนมากถ้าพูดถึง OOP คืออะไร แทบทั้งหมดจะตอบว่า “การโปรแกรมมิ่งเชิงวัตถุ” ก็แปลไม่ผิดนะครับ ถูกแล้วแต่ไม่ตรงคำถาม OOP เป็น “แนวคิดในการ Programming ครับ” โดยมีโมเดลทางความคิดที่ว่า “มองส่วนประกอบ(Component) ส่วนต่างๆของโปรแกรมให้เป็นวัตถุแต่ละชิ้น ที่ทำงานร่วมกันเป็น Program หรือ Application” ซึ่งด้วยโมเดลความคิดนี้เราก็เอาไปต่อยอดในการเขียนโปรแกรมต่อไป
และข้อต่อไป เมื่อถามว่า OOP ทำงานอย่างไร แทบทั้งหมดเช่นกันก็จะตอบว่า “ทำงานโดยการสร้าง Class” เคยตอบคำถามหรือข้อสอบแบบนี้รึเปล่า ไม่ใช่นะครับ ตอบไม่ตรงคำถามอีกเช่นกัน ความเข้าใจผิดที่สุดเรื่องหนึ่งคือ “เราโฟกัสเรื่องเกี่ยวกับ OOP ที่ Class มากเกินไป” ซึ่งที่จริงแล้ว Class เป็นสิ่งสุดท้ายด้วยซ้ำไปใน OOP ไม่ใช่ว่าไม่สำคัญนะครับ แต่เป็นสิ่งสุดท้ายหลังจากเรา โมเดลความคิดเสร็จแล้ว
หลักการของ OOP จริงๆมันหมายถึงแค่ “การสื่อสารระหว่าง Object กับ Object” พูดให้ง่ายกว่านั้นอีกนิดก็คือ “การคุยกันระหว่าง Object” นั่นเอง “Object ตัวหนึ่งจะไปสั่งให้ Object ทำงานอย่างหนึ่งที่มันทำได้ (ก็คือ method ของ Object นะครับ) มันก็ทำไปตามที่ถูกสั่งมา ทำเสร็จมันก็ Return ผลลัพธ์กลับไป” เท่านี้แหละครับ จบ OOP ในหนึ่งบรรทัด
สิ่งที่สำคัญที่สุดใน OOP คือการที่เราโมเดลความคิดว่า “Object อะไรบ้างที่คุยกันแล้วมันจะได้งานที่เราต้องการ” แล้ว Object แต่ละตัวจะเป็นอย่างไร ถึงตอนนั้นก็ค่อยมาออกแบบคลาสกันอีกที
คราวนี้ถ้าถามถึง โมเดลของ Object แล้วตอบว่า Class เนี่ย ก็ถึงจะถูก Class หมายถึงคุณลักษณะของวัตถุว่าจะมีคุณสมบัติอย่างไร ทำงานอย่างไร โดยคลาสก็มีคุณสมบัติสามประการอย่างที่รู้กัน คือ Encapsulate, Polymorphism, Inheritance แล้วแต่ละคุณสมบัติอย่างไร
Inheritance – แน่นอนครับ คุณสมบัติการสืบทอดคลาส เพื่อเป็นการขยายคุณสมบัติของคลาสโดยการคงตัวแม่แบบเอาไว้ คลาสที่สืบทอดออกมาจะมีคุณสมบัติเช่นเดียวกับต้นแบบทุกประการและเราสามารถเพิ่มเติมคุณสมบัติได้ ประโยชน์ของคุณสมบัตินี้ คือ มีการ reuse code ลดความซ้ำซ้อนนั่นเอง
Encapsulate – อย่างที่เคยเรียนกันมาครับ คือการรวมเอา attribute และ method รวมกันไว้ด้วยกัน ประโยชน์จริงๆก็คือ “ทำให้ไม่งงว่า method ไหนใช้ attribute ไหนบ้างเวลาทำงาน” ก็เลยรวมมันไว้ซะใน Class เดียว แค่นี้ก็ไม่งงละ
Polymorphism – แปลกันมานานว่า “คุณสมบัติการพ้องรูป” แท้จริงแล้วมันพ้องอะไร ? ที่จริงแล้วการพ้องรูปของมันก็คือรูปของการทำงานนั่นเอง หมายความว่า แม้ว่า Interface ที่สั่งให้มันทำงานจะถูกเปลี่ยนไปก็ตาม แต่ด้วยคุณสมบัตินี้ ก็ทำให้ Object สามารถทำงานได้เหมือนเดิม โดยที่เราไม่ต้องแก้โค้ดเลย ตัวอย่างง่ายๆ เมื่อก่อนปลั๊กไฟบ้านเราจะมีแค่สองรู แต่หลังๆมีสามรูคือมีสายดินด้วย แต่เราต้องเรียนรู้วิธีการเสียบปลั๊กสามรูใหม่มั้ยครับ ? ไม่ต้อง แม้ว่ามันจะเป็นปลั๊กสองรูหรือสามรู เราก็เสียบมันเหมือนเดิม หรือ อุปกรณ์ไฟฟ้าก็ทำงานของมันอยู่ได้เหมือนเดิม ประมาณนี้แหละครับ พอเห็นภาพมั้ย
ในเรื่องของ OOP ก็จะขอพูดไว้ประมาณเท่านี้ อาจจะไม่เหมือนในหนังสือซักเท่าไหร่ใช่มั้ยครับ คิดว่าถูกผิดยังไงก็มาแชร์แลกเปลี่ยนความคิดเห็นกันก็ได้นะครับ ยินดีอย่างยิ่งครับ
We already known “MVC Design Pattern”, a first thing for iPhone Application development from entry before. Now, In this entry, We’re talking about a very basic thing for programming in current time. It’s Object-Oriented Programming.
About OOP, Many people will known especially CS Student. But from I know, Many people understood “OOP is programming as Object and coding in Class” but still programming with Procedural Programming paradigm like coding a C or Pascal and finally you got an only one Object of main program.
Are you understood OOP like this ? So, OOP in this entry may be not same as OOP which you ever learn. Let start.
Mostly if you ask “What is OOP ?”. Almost all will answer as “Programming as Object”. OK you not wrong translate but not right for question. As a matter of fact OOP is one of “Thinking Model for Programming” by “Look an each component as object working together until is an Program”. And then we implement by coding as model which we think.
Next question. If we ask “How OOP is work ?”. Almost all will answer “Work by build a class”. Did you ever answer a question or exam like this ?. No, It not. That answer is still not right for question. A one mistake about OOP is “We over focus on Class”. Obviously Class is the last thing to do in OOP process. Class is important too but it is next from Thinking Model.
About concept of OOP is only “Object Communication with Object”. Object1 send action to Object2 to do a method which Object2 can do. When Object2 done, respond a result to Object1. Only this process. Finished OOP in single line.
The most important in OOP is “Thinking Model”. What object you should have and how it’s communication. For next, What object should be, in that time we should think about Class design.
Now, If I ask about model of object and you answer Class. It’s right answer. Class is a characteristic of object, What attribute should have, What methods can work. A property of class is 3 things well known. Inheritance, Encapsulate and Polymorphism.
Inheritance – Sure, Direct from name. A property of inherit from parent class to child class. Child class is have all thing like parent class but you can improve attribute or method without edit Parent class. A really benefit is “Reuse Code” decrease redundancy code.
Encapsulate – Like you ever known, Include attribute and method in same place. A really benefit is “Not confuse, A method use which attribute”. So, We include it in same place.
Polymorphism – is a property “Object still work without edit code even you change an interface” for easy example home electronic plug. Electricity still working even you plug in two-holes plug or three-holes plug.
I finished about OOP in this line. It may be not same as your book ever read. What do you think about it. You can share comment. I’m welcome.
2 comments กุมภาพันธ์ 1, 2009
Cocoa & iPhone Development : MVC Design Pattern
มาว่ากันด้วยเรื่องแรกที่เราต้องรู้จากที่กล่าวไว้ข้างต้นนะครับ(ถ้าไม่นับว่าต้องมีเครื่องแมค อันนั้นมีตังซื้อก็พอแล้ว อิอิ) เรื่องเกี่ยวกับ MVC (Model-View-Controller) Design Pattern นั่นเอง
อันที่จริง เกี่ยวกับ MVC นี้ หาอ่านได้ไม่ยากในอินเตอร์เนต ทั้งภาษาอังกฤษและภาษาไทย ซึ่งหลายๆที่ก็อธิบาย MVC ในเทอมต่างๆภาษาและเฟรมเวิร์คกันไป เช่น MVC บน PHPCake(PHP) หรือ MVC บน Ruby on Rails(Ruby) ในที่นี้ ผมเองก็จะขออธิบายในเทอมของ Cocoa ละกันนะครับ
เริ่มเลยแล้วกัน…
MVC Design Pattern คือ Design Pattern ในระดับ Architecture แบบนึง ที่ได้รับความนิยมในการ Design Application ขนาดใหญ่ในปัจจุบัน ตัว MVC ในชื่อของมัน ย่อมาจากคำว่า Model-View-Controller ซึ่งก็ตรงตัวกับลักษณะของมันนั่นเอง ซึ่งก็คือ “การแบ่งองค์ประกอบของ Application ออกเป็นสามส่วนแยกออกจากกัน” ซึ่งแต่ละส่วนจะทำงานเชื่อนโยงกันในลักษณะดังภาพ

Cocoa MVC - ภาพจาก Apple.com
แนวคิดของ Design Pattern จากภาพจะเห็นว่า แอพพลิเคชั่นแบ่งออกเป็น 3 ส่วน คือ View และ Model เชื่อมต่อกันผ่าน Controller แล้วแต่ละส่วนมันเป็นยังไงไงบ้างหล่ะ ?
Model คือ ส่วนของข้อมูล ตัวอย่างเช่น Database หรือ Datasource ของตารางใน Application เป็นต้น Model อาจรวมถึง State ของ Application ได้ด้วยเช่นกัน เช่น Preference Setting ของโปรแกรมก็ได้ ไม่ได้จะหมายถึง Information อย่างเดียวเท่านั้น ซึ่งตัว Model เองก็จะต้องมี Model Logic อยู่ด้วย ซึ่งก็หมายถึง เงื่อนไขการเข้าถึงหรือการเก็บข้อมูล จะเก็บอย่างไร ชนิดไหน อย่างไร ฯลฯ (ในส่วนของ Model Logic จะเห็นชัดเมื่อเรารู้จัก Property List ใน Objective-C 2.0 ที่จะพูดถึงในภายหลังนะครับ ตอนนี้ Push Stack ไว้ก่อนนะครับ) หน้าที่ของ Model ไม่มีอะไรไปมากกว่า “การเก็บข้อมูล” และ “การส่งข้อมูล” เท่านี้จริงๆครับ ไม่มีมากไปกว่านี้ อย่าสับสนกับ Model Logic นะครับ
View คือ ส่วนของการแสดงผล เช่นกันครับ หน้าที่ของ View ไม่มีไปมากไปกว่า “การแสดงผล” และ “การรอรับคำสั่ง” View ที่เห็นๆกันก็คือ GUIs นั่นแหละครับ ภายใน View ก็เหมือนกับ Model ครับ ต้องมี View Logic เช่นกัน View Logic ก็คือข้อกำหนดของการแสดงผลครับ หน้าต่างกว้าง-ยาว แค่ไหน ปุ่มเป็นสไตล์ไหน ตัวอักษรสีอะไร ฯลฯ นีแหละครับ View Logic น่าจะพอเห็นภาพนะครับ
Controller ส่วนนี้เป็นส่วนที่เชื่อมการทำงานระหว่าง Model กับ View จะพูดให้ง่ายกว่านั้นก็คือ มันคือ “User Logic หรือ Action Logic” ครับ เพราะมันเป็นส่วนควบคุมการทำงานของ User ที่ทำต่อ Application นั่นเอง ว่า User ทำอะไรได้บ้าง แล้ว Application ต้องทำอะไรบ้างเมื่อได้รับ Action นั่นมาแล้ว นั่นคือหน้าที่ของ Controller ครับ
ใน Cocoa Framework ยังมี Object อีกประเภทนึง เรียกว่า “Hybrid Model” ซึ่งหมายถึง Model ที่รวม Model กับ Controller เข้าไว้ด้วยกัน เพราะบางครั้งการแยกกันแบบ MVC อาจไม่ได้เหมาะสมกับ Application ทุกแบบ(รวมกันอาจจะดีกว่า ง่ายกว่า เร็วกว่า) ตัวอย่างของ Hybrid Model ใน Cocoa ก็เช่น Array Controller เป็นต้น และใน iPhone App Dev ก็เช่น Image Picker เป็นต้น(นอกจากนี้ยังมีอีกเยอะ แต่ยังไม่ได้ลอง) ซึ่งก็จะได้รู้จักกันภายหลังนะครับ (Push Stack ไว้อีกอันแล้วกันนะครับ)
ในส่วนของ MVC ก็ขอจบไว้เท่านี้นะครับ สามารถศึกษาเรื่องของ MVC ได้จากที่อื่นด้วยนะครับ บางที่อาจจะเขียนดีกว่าผมซะอีก เห็นว่ายังไงก็แนะนำกันได้นะครับ แล้วเจอกันใน Entry ถัดไปนะครับ (กะว่าจะอธิบายสั้นๆนะ ทำไมมันยาวไปซะได้ละเนี่ย เหอๆ)
Let’s talk about first thing, which you must know before start to iPhone application development, It’s MVC Design Pattern
In fact, You can find an article about MVC very easy from internet. Thai and English both. Each articles will explain about MVC in term of any language and framework such as MVC on PHPCake(PHP) or MVC on Ruby on Rails(Rails). So, I’ll explaining MVC in term of Cocoa Framework .
Let’s start
MVC Design Pattern is one Design Pattern in “Architecture Level” which popular in “Large scale application design” in this time. MVC is stand for Model-View-Controller which explain self structure from name is “Separate an element of application to 3 parts”. Each part is work together like in illustrate.

Cocoa MVC - ภาพจาก Apple.com
From the illustrate, you see Application separate in 3 parts is “View” and “Model” is connected by controller. How its work?
Model is data storage part. Such as Database or Data source in table in application. Model part is can be include state of application like preference setting not only “Information”.Model must have a “Model logic” inside. Model logic is a “Condition for storage”, how to storage?, which type and etc (we’ll talk about this again in “Property list in Objective-C 2.0 entry). A load of Model is not more than “storage” and “retrieve” a data. Not more than that.
View is a show result part. Same as “Model” a load of View is not more than “Show result” and “Wait for action”. A well-known View is GUIs. Inside View must have “View Logic” like Model too. Model Logic is an attribute for display such as Dimension (height-width), button style, font color and etc.
Controller is a connection part with “Model” and “View”. Say an easier is a “User Logic” or “Action Logic”. Because its controlled an action of user to do on application. What user can do ?. When got an action, What should application do ? , This is Controller load.
In Cocoa Framework still has one object type called “Hybrid Model”. Its a Model which have controller integrated. Because maybe a separate in 3 part like MVC is not good solution for all. For example for “Hybrid model” on Cocoa such as “Array Controller” and in iPhone App Dev is such as “Image Picker”. We’ll say again in later.
I finished entry about MVC only this. You can read MVC article from other place (somewhere can explain better than me). See you again in next Entry.
4 comments มกราคม 24, 2009
Cocoa & iPhone Development : Introduction to iPhone Development
ตอนนี้ผมมีหัวเรื่องเกี่ยวกับการเขียน App บน iPhone เพียบเลย เพราะเพิ่งจะเขียนแอพไอโฟนเสร็จไปตัวนึง เป็น Twitter Client ครับ ยังไม่มีอะไรมากเพราะเป็นแค่แอพที่ทดลองเขียนตาม Assignment ของ CS193P iPhone App Dev ของ Stanford ที่เคยโพสไว้ Entry ก่อนนี้
เมื่อก่อน Entry เกี่ยวกับ Cocoa ของผมดูเหมือนจะไม่ค่อยได้รับความสนใจเท่าไหร่ อันนี้ผมก็ไม่แปลกใจ เพราะบ้านเราใช้ .net framework แทบจะเป็นหลักในการพัฒนาแอพ(เพื่อโปรเจคจบหรือขาย) บวกกับบ้านเราคนใช้เครื่องแมคก็ไม่ได้มากมายอะไร แถม Developer บนแมคยิ่งน้อยใหญ่เลย
แต่ตอนนี้ อะไรๆมันเริ่มเปลี่ยนไป หลายๆคนสนใจการพัฒนาแอพด้วย Cocoa Framework ไม่ใช่เพื่อเครื่องแมค แต่เพื่อ “iPhone” นั่นเอง ใน Entry ก่อนหน้านี้ที่ผมเขียนเรื่อง “การสร้างปุ่มแบบ Run-Time บน iPhone” ปรากฎว่ามีผู้สนใจสอบถามเรื่องเกี่ยวกับการพัฒนาแอพบน iPhone เพราะจะทำเป็นโปรเจคจบ ผมก็เลยคิดว่า งั้นผมจะเขียน Entry เกี่ยวกับการพัฒนาแอพบน iPhone เป็นบทๆไปด้วย นอกจากที่เขียนเป็นทิปๆไป คิดว่าน่าจะมีประโยชน์กับผู้สนใจและเอาไว้แลกเปลี่ยนความรู้กันไปอีกทางนึง
เกริ่นมาเนิ่นนานแล้ว เริ่มเลยแล้วกันนะครับ !!
Chapter 0 : Before we’re start | ก่อนจะเริ่ม
ก่อนที่เราจะเริ่มการพัฒนาแอพบน iPhone นั้น ก็ต้องเตรียมตัวกันก่อนครับ เช็คตัวเองกันนะครับว่ามีสิ่่งเหล่านี้หรือยัง
1. Mac Computer : นี่ไม่ได้มาโฆษณานะครับ แต่มันจำเป็นต้องมี สิ่งแรกที่ขาดไม่ได้คือ เครื่องแมค (intel คงไม่มีปัญหา แต่ PPC ผมว่ามันคงจะอืดน่าดู) ต้องแสดงความเสียใจให้กับสาวก Windows นะครับ เพราะ Apple ไม่ได้ออก SDK For Windows มาให้
แต่ก็ไม่ได้ผูกขาดซะทีเดียวนะครับ Opensource iPhone’s Library ก็มีอยู่เหมือนกัน ติดแต่ตรงที่ทำงานบน Linux, ไม่มี Simulator, ไม่มี IDE ดีๆ ฯลฯ ซึ่งกว่าจะเสร็จงานก็คงตกยุคไปซะก่อน แต่ถ้าอยากลองก็ไม่ได้ว่ากันนะครับ เข้าไปดูรายละเอียดจากหนังสือ “iPhone Open Application Development: Write Native Objective-C Applications for the iPhone by Jonathan Zdziarski” กันได้
2. ความรู้เรื่องภาษา Objective-C : Objective-C เป็นภาษาหลักในการพัฒนาแอพบน iPhone ครับ เท่าที่รู้ตอนนี้ ยังไม่มีภาษาอื่นๆ ถ้าอยากรู้ว่ายากหรือแตกต่างกับ C หรือ C# มั้ย ถ้าเป็นเมื่อก่อนคงบอกว่าไม่มาก แต่หลังจากปีที่ผ่านมาที่ Apple ปล่อย Objective-C 2.0 ออกมา ก็คงต้องบอกว่า ต่างกันอยู่เหมือนกัน แต่ก็ไม่ได้มากมาย เรื่อง Objective-C จะพูดอีกตอนหลังนะครับ
3. ความรู้เรื่อง Object-Oriented Programming : จะว่าไปก็ไม่ใช่จำเป็นแค่เฉพาะกับการ Programming แค่บน iPhone หรอกนะครับ แต่จำเป็นกับการ Programming ในปัจจุบันเลยทีเดียว ถ้ายังไม่แม่นไม่แข็งก็ต้องฝึกกันไปนะครับ เขียนบ่อยๆต่อไปก็จะเก่งขึ้นเรื่อยๆเอง โดยเฉพาะหัดเขียนบน Cocoa หรือ Cocoa Touch Framework อันนี้ช่วยให้เรียนรู้มากครับ เพราะบังคับให้เราเขียนแบบ OOP ทั้งหมด
4. ความรู้เรื่อง MVC Design Pattern : อันนี้ก็สำคัญครับ ปัจจุบัน MVC เป็น Design Pattern ที่ได้รับความแพร่หลายมากในการพัฒนา Application เพราะสามารถแก้ไข จัดการ หรือขยายสเกลของงานได้ง่าย ซ่ึงปัจจุบัน Application ทั้งหลายก็ออกแบบด้วย Design Pattern นีเป็นส่วนมากนะครับ
หลักๆเลยก็จะมีส่ีอย่างนี้นะครับ ที่จะต้องมีเพื่อการพัฒนา iPhone Application สำหรับหัวข้อที่ 2-4 สามารถหาศึกษาได้ทั่วไปนะครับ หรือถ้าอยากอ่านจากหนังสือ ก็แนะนำ Cocoa(R) Programming for Mac(R) OS X (3rd Edition) by Aaron Hillegass ครับ เล่มนี้ถือว่าเป็นไบเบิลของ Cocoa Programming เลยก็ว่าได้ หรือถ้าบนเวบก็เข้าไปที่ Developer Connection ของ Apple ได้ครับ
ในบททนี้ก็จบไว้เท่านี้ก่อนแล้วกันนะครับ สำรวจตัวเองกันพร้อมแล้ว ก็เจอกันบทถัดไปครับ ;)
Now, I have a many topic about iPhone application programming. Because I’m just finished written the first iPhone application. It’s twitter’s client application. It not have a many features because I try to do from Stanford’s course, CS193P : iPhone app dev. And I ever says about this course in entry before.
From the past, Entry about Cocoa programming look like not have a person who interested in. But I’m not surprise, Because .net framework is more popular for application development (for grad’s project or commerce). And a mac user group in Thailand is not much and don’t say about mac developer, It’s really small.
But now. Many things is change. Many developer interesting an application development on Cocoa Framework. Not for Mac but for iPhone. From before this entry, I write about “How to create a button on Run-Time on iPhone” and have a comment from person who interest in iPhone development (He’ll do for grad’s project). So, I think I should write an Entry about “iPhone Development” as chapter over and above only “Programming Tip”. I hope it useful for who interest and for exchange knowledge.
Says for a long time. Lets start!!
Chapter 0 : Before we’re start
Before we start to iPhone Application Development. Check yourself. Do you have these thing ?
1. Mac Computer : I’m not an apple’s reseller but it essential. A first thing which you must had is Mac Computer (Intel is no prob but PPC I’m not sure, It’ll very slow). Say sorry to Windows users because Apple not release iPhone SDK for Windows.
But not fully monopolize. It’s have opensource iPhone Library too. But It’s work on Linux, Not have simulator, Not have a good IDE and etc. I think it’ll waste of time. But if you interest, Can look on this book ”iPhone Open Application Development: Write Native Objective-C Applications for the iPhone by Jonathan Zdziarski”
2. Knowledge about Objective-C : Objective-C is a main programming-language for iPhone Application Development. For other, I’m not sure. Obj-C will not same as C# after Apple release Obj-C 2.0. About Obj-C I’ll say later.
3. Knowledge about Object-Oriented Programming : Not only for iPhone App Dev but for current programming. If you not understand, you must try. Hard practice is better for you especially practice on Cocoa or Cocoa Touch Framework. It’s help you more understand about OOP because it force you to done everything as object.
4. Knowledge about MVC Design Pattern : It’s essential too. Now MVC is a popular design pattern for application because it easy to manage and enlarge a work scale in later version. Now all of application design on MVC Design Pattern.
For a main is these 4 things which you must have before application development for iPhone for 2-3 choice you can read from general in internet. Or if you want to read from book, I recommend Cocoa(R) Programming for Mac(R) OS X (3rd Edition) by Aaron Hillegass. This book is like as a Bible for Cocoa Programming. Or read from developer Connection of Apple.
3 comments มกราคม 22, 2009
Cocoa & iPhone Development : Add UIButton in Runtime
แบบภาษาไทย
สำหรับผู้ที่ศึกษาการเขียนโปรแกรมด้วย Cocoa Framework หรือ Cocoa Touch Framework และ Objective-C ส่วนมากจะคุ้นเคยกับการสร้างปุ่มโดยการวางลงไปในหน้า View ของเราที่อยู่ในหน้า Interface Builder แล้วก็สร้าง Action ขึ้นมาในคลาสแล้วก็ลากเชื่อม Action กับปุ่มที่เราสร้างขึ้นใช่มั้ยครับ
อันนั้นเป็นวิธีการสร้างปุ่มแบบ Static ใน Compile-Time ซึ่งไม่มีอะไรยุ่งยากซับซ้อน เพราะตัว XCode และ IB สามารถทำงานร่วมกันได้เป็นอย่างดีอยู่แล้ว ข้อดีของมันคือง่ายไม่ซับซ้อน แต่บางครั้งเราอาจต้องการปุ่มที่มีความยืดหยุ่นมากกว่า เช่น ปุ่มที่สามารถเลือกได้ว่าในขณะนั้นมันควรเลือกใช้ Method ไหนกันแน่ภายใต้เงื่อนไขนั้นๆ ดังนั้น ใน Entry นี้จะกล่าวถึงการสร้างปุ่มที่จะถูกสร้างและแสดงผลในช่วง Runtime
อันนี้จะเป็นตัวอย่างการสร้างปุ่มใน UIKit ของ Cocoa Touch Framework นะครับ
เริ่มต้นการสร้างปุ่มก่อนเป็นอย่างแรก
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
เท่านี้เราก็จะได้ปุ่มแบบ RoundedRect แสดงผลอยู่หน้าหลักของเราแล้วนะครับ เราสามารถที่จะปรับขนาดและตำแหน่งที่ต้องการได้ โดยเซต property frame ของปุ่มของเรา หรือคุณสมบัติอื่นๆก่อนนำไปแสดงผลได้นะครับ ซึ่งสามารถดูได้ในหน้า Reference ตัวอย่างเช่นการเซต property frame ทำแบบนี้นะครับ
button.frame = CGRectMake( พิกัด X, พิกัด Y, ความกว้าง, ความสูง)
เราได้ปุ่มมาแล้ว ต่อไปเป็นการกำหนดว่าปุ่มนั้นจะเรียก Method อะไรเมื่อถูกกด กำหนดแบบนี้ครับ
[button addTarget:self action:@selector(Method ที่ต้องการจะให้ทำ) forControlEvents:(UIControlEvent)แอคชั่นบนปุ่ม];
เอาละครับ เรากำหนดคุณลักษณะต่างๆเรียบร้อยแล้ว (อาจกำหนดคุณสมบัติอื่นๆได้อีก แต่ไม่ขอเขียนในนี้นะครับ) คราวนี้ขั้นตอนสุดท้ายก็คือ นำไปแสดงผล แบบนี้ครับ
[self.view addSubview:button];
เท่านี้เราก็ได้ปุ่มที่ถูกสร้างขึ้นในช่วง Runtime เรียบร้อยแล้วครับ ไม่ยากเลย
Happy Coding นะครับ.
In english version.
For the people who study about programming on “Cocoa Framework” or “Cocoa Touch Framework” and Objective-C will known how to create a button on a view of Interface Builder’s page. You’ll drag a button from Library and drag the line, connect between button and method in class which you created.
That solution is a way to create a static button in Compile-Time. It easy and not complex because XCode and IB can work good together. But sometime we’ll want a more flexible button such as button which can select a method under condition in each time. So, I’ll saying in this entry about a how to create a button in runtime.
This example is for UIKit on Cocoa Touch Framework/
At first. We must create a button.
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundRect];
now We got a button . We can customize many property about button such as size, position, title orimage and etc. You can read from reference document. Now, I’ll show you how to set frame(size and position) of button. Do like this.
button.frame = CGRectMake( XPosition, YPosition , Width, Height);
When we finished customize button. Next, We’re assigning which method that our button do when got an action from user. We do like this.
[button addTarget:self action:@selector(Method) forControlEvents:(UIControlEvent)Action];
Finally. We show our button on the view by this method.
[self.view addSubview:button];
Just only, We got a button which created on runtime . Very easy.
Happy Coding
1 comment มกราคม 15, 2009
