Archive
[Objective-C myNote]
Objective-C เป็น ภาษาที่ใช้เป็นหลักในการพัฒนาโปรแกรมใน MAC และ iPhone
บันทึกนี้เหมาะสำหรับ ท่านที่มีประสบประการณ์ ในการเขียนโปรแกรม แล้วและเข้าใจ object-oriented ดี ไม่เหมาะสำหรับผู้เริ่มหัดเขียนโปรแกรม นะครับ เพราะจะอ่านไม่รู้เรื่อง เอานะครับ ฮะ ฮะ เอิก
เอาว่าถ้า เริ่มศึกษา Objective-C ก็เชิญไปที่นี่ก่อนะครับ Learn Objective-Cหรือว่าที่นี่ก็น่าจะเป็นที่เริ่มต้นได้เป็นอย่างดี ครับ Cocoadevcentrol.com
สำหรับในบทความเล็ก ๆนี้จะ เป็น บันทึกสั้น ๆ ในเรื่องต่าง ของ Objective-C ดังนี้ครับ
- Method
- Accessor
- การสร้าง Objects (Creating Objects)
- การจัดการกับ Memory – Basic Memory Management
- การออกแบบ class interface – Designing a Class interface
- Init
- Dealloc
- การจัดการกับ memory ,Memory Management (เพิ่มเติม)
- Logging
- Properties
- Calling Methods on Nil
- Categories
Method
- การรียกใช้ methods
[ object method];
[ object methodWithInput:input];
- การ return ค่า จาก method
Output = [object methodWithOutput];
Output = [object methodWithInputAndOutput:input];
ข้อสังเกต นะครับการเรียก method คือการส่ง message ให้ object
การเรียก method ของ class เช่น การเรียก string method ของ NSString class ซึ่ง ให้ค่าเป็น
NSString object
id myObject = [NSString string];
id type หมายถึงตัวแปร myObject สามารถอ้างอิงไปยัง object ใด ๆ ประมาณ late binding นะครับ หมายความว่าหากเราเรียก method ที่ NSString ไม่มี ก็ไม่แสดง error ในหว่างทำการ compile
[จากตัวอย่างเป็นวิธีการ สร้าง object ของ Objective-C เขา นะครับ]
NSString* myString = [NSString string];
ครับสำหรับ ตัวอย่างนี้เป็นการ สร้าง object NSString ชี้โดย myString ซึ่งให้เป็น NSString
Compiler จะตรวจสอบได้ หากเรียกใช้ method ที่ไม่มี ใน NSString นะครับ
สังเกตว่า ตัวแปร object ใน Objective-C จะเป็น pointer แต่ id type จากตัวอย่างด้านบนไม่ต้องมี * เพราะมันถูกกำหนดให้เป็น pointer อยู้แล้ว เพราะฉะนั้นไม่ต้องใช้
การเรียก Message แบบ ซ้อน กัน [Nested messages]
[NSString stringWithFormat:[prefs format]];
การเรียก ซ้อนกันก็ไม่ควรเรียกซ้อนกันไม่เกิน 2 message ต่อบรรทัด เพื่อให้สามารถอ่านได้ง่าย
Methods แบบ หลาย Input
เหมือนทั่วไปครับ method สามรถ รับค่าได้ มากกว่า 1 ค่า ใน Objective-C ก็เช่นเดียวกันแต่ Objective-C นั้น ใช้การแตก ชื่อ method ให้เป็นหลาย ๆ ส่วนเพื่อรับข้อมูล หรือ argument ดังตัวอย่าง
การประกาศ :
-(BOOL) writeToFile:(NSString *)path atomatically:(BOOL) usAuxilliaryFile;การเรียกใช้ :
BOOL result = [myData writeToFile:@”/tmp/log.txt” automatically:NO];
ชื่อmethod ก็คือ writeToFile: automatically: ครับ ไม่ใช่ ชื่อ argument นะครับ
Accessor
Instance variable โดย default เป็น private ในการ กำหนดค่า (set) หรือการรับค่า จาก variable จะต้องใช้ accessors สามารถทำได้ดังนี้ครับ
Traditional 1.x sytax
[photo setCaption:@”Day at the Beach”];
Output = [photo caption];
ครับเราจะเห็นว่าการ ใช้งาน accessor นั้น ก็คือการเรียกใช้ method นั่นเอง
จำไว้ว่าเมื่อใดก็ตามที่เห็น code อยู่ใน square brackets หมายถึง เป็นการส่ง message ให้กับ object หรือ class นะครับ
จากตัวอย่าง ที่ บรรทัดที่ 2 caption ไม่ได้ นำด้วย get ใน Objective-C โดยมากจะไม่ใส่ prefix ให้กับ getter ครับ
Dot syntax
สำหรับ dot syntax สำหรับ getter และ setter นั้น เริ่มมีใน Objective-C 2.0 Mac OS X 10.5 เป็นต้นมาครับ
photo.caption = @”Day at the Beach”;
output = photo.caption;
เราเลือกใช้แบบใดก็ได้นะครับ เลือกเอาซะแบบหนึ่ง นะครับ
การสร้าง Objects (Creating Objects)
การสร้าง Object ใน Objective-C สามารถทำได้ 2 วิธี
วิธีแรกเป็นวิธีที่เรา แสดงให้เห็นแล้วก่อนหน้านี้
NSString* myString = [NSString string];
วิธีนี้เป็นแบบ automatic style ครับ สร้างโดยการใช้ autoreleased object ซึ่งจะพูดถึงต่อไป หลังจากนนี้ครับ
อีกวิธีหนึ่ง เรียกว่า manual style คือต้อง ทำ release memory เองหลังจากใช้ object แล้ว ครับ
NSString* myString = [[NSString alloc] init];
จาก code เป็นการเรียก method แบบ ซ้อนกัน (nest)
– Alloc เพื่อ จ้อง memory และ สร้าง object
– Init เป็นการ เรียก method ใน object ที่ถูกสร้างขึ้น มักใช้ในการ กำหนดค่าเริ่มต้นต่าง ๆ ในบางกรณี เราใช้ init ที่รับ input ได้ เช่น
NSString* value = [[NSString alloc] initWithFloat:1.0] ;
การจัดการกับ Memory – Basic Memory Management
ถ้าเรา สร้าง object โดยใช้ alloc อย่างที่กล่าวไป เราต้องทำการ release object หลังจาก ใช้เสร็จ ครับ
ตัวอย่างเช่น
// string1 will be released automatically
NSString* string1 = [NSString string];// must release this when done
NSString* string2 = [[NSString alloc] init];
//..
[string2 release];
การออกแบบ class interface – Designing a Class interface
การสร้าง class มี 2 ส่วนคือ
- Class interface เก็บไว้ใน ClassName.h
- Define instance variable and public methods
- Implementation เก็บไว้ใน ClassName.m
- Actual code
- Private method ซึ่ง ใช้ภายใน
ตัวอย่าง class ชื่อ photo
#import <Cocoa/Cocoa.h> @interface Photo : NSObject { NSString* caption; NSString* photographer; } @end
– ใช้ #import directive เพื่อบอก compiler ว่าจะเรียกใช้ library อะไร
– @interface บอกว่าเป็นการ ประกาศ class ชื่อ photo colon บอกว่า photo มี superclass เป็นอะไร
– ใน curly bracket ประกาศ variable 2 ตัว ชื่อ caption, photographer ซึ่งเป็น NSString
– จบด้วย @end
เอาไว้ต่อกันใน ตอนถัดไปดีไหม ครับ ยาวเกินไปแล้ว
s_teerapong2000@yahoo.com
ธีระพงษ์ ส.
การใช้งาน jQuery กับ ASP.NET
เหมือนกับว่าผม จะ out อยู่คนเดียวนะครับ หันไปทางไหน ก็ jQuery jQuery ถูกนำมาใช้กันอย่างกว้างขวางไม่เว้น ASP.NET ของ Microsoft และมีทีท่าว่าจะกลายเป็น partner กันในที่สุด บทความเล็ก ๆ นี้ของผม จะพาท่านนักพัฒนาทั้งหลายมา รู้จักกับเจ้า jQuery กัน นะครับ
อันที่จริง แล้วผมเองก็ชุลมุนมากมาย มีหลายสิ่งหมลายอย่างที่ต้องจัดการ แต่ก็ยอมไม่ได้ที่จะไม่ได้ แตะ เจ้า jQuery สักนิด สักหน่อย ฉะนั้นก็เชิญตามมา ดูกันเลยนะครับ
jQuery คืออะไร หนอ
jQuery นั้น เป็น javaScript library แฮะ แฮะ อย่างน้อยก็ไม่ได้มีอะไรแปลกใหม่แล้วหล่ะ แต่เจ้า jQuery นั้นมันมีอะไรมากไปกว่า javaScirpt library ธรรมดา เพราะว่ามัน สนับสนุนการใช้งาน CSS3 และ เป็นที่รู้จักของ browsers ทั้งหลาย ใช้งานง่าย เร็ว ใช้ DOM ในการเข้าถึง html documents และสามารถเพิ่มลูกเล่นให้กับ element ต่างได้ และอื่น ๆ อีกมากมาย
jQuery และ JavaScript ต่างกันอย่างไร หล่ะ
อื่ม ก็ JavaScript นั้นเป็น language ส่วน jQuery เป็น library ที่เขียนขึ้นด้วน JavaScript นั่นเอง ครับ
jQuery ไป download ที่ไหน หรือ และเอามาใช้อย่างไร
การใช้ jQuery นั้น สามารถเรียกใช้ได้หลายลักษณะ กล่าวคือ
- วิธีรแรก สามารถdownload code มาใช้งานกับโปรแกรม
- วิธีที่ สอง อ้างอิงได้โดยตรง จาก Content Delivery Network (CDN) ซึ่งมีผู้ ให้บริการ เช่น
ปัจจุบัน Visual studio 2008 สนับสนุน jQuery Intellisense จาก file ที่เพิ่มเข้ามาใน jQuery ซึ่งสามารถ download ได้ที่ http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6-vsdoc.js
แต่ ถ้าเรา update VS2008 SP1 Hotfix เราจะสามารถทำให้ VS2008 ของเรา สนับสนุนการใช้งาน JavaScirpt file รวมถึง jQuery intellisense ด้วย ซึ่งสามารถ download hotfix ได้ที่ http://archive.msdn.microsoft.com/KB958502/Release/ProjectReleases.aspx?ReleaseId=1736 สามารถ download และ update ได้เลย ซึ่ง จะต้อง เป็น vs2008 sp1 เท่านั้นนะครับ
เอาละครับ ลองมาดูการใช้งานกันเถอะ
สมมุติว่าเรา ลง hotfix แล้วนะครับ ให้ไป download
- jQuery library ที่ http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.js
- และ jQuery VS2008 IntelliSense documentation http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6-vsdoc.js
แล้วทำตามขั้นตอนต่อไปนี้เลยครับ
- เปิด Visual studio 2008 > file > New > WebSite > เลือก ASP.NET 3.5 Website จาก template แล้วเลือก ภาษาในการพัฒนาเป็น C# เลือก ตำแหน่งที่จะวาง project แล้ว บันทึก
- Click ขวาที่ project แล้ว > New folder > กำหนดชื่อให้เป็น “Scripts”
- Click ขวาที่ Scripts > Add Existing Item > Browse ไปที่ path ที่เรา download jQuery (jquery-1.2.6.js )มาวางไว้ และ intellisense document (jquery-1.2.6-vsdoc.js ) เลือก file ทั้งสองแล้ว บันทึก ตามรูป
–
- ให้ [ลาก /วาง] jquery-1.2.6.js จาก solution explorer มาวางไว้ที่ page เพื่อสร้าง reference ดังรูป
- เนื่องจาก เราได้ลง hotfix แล้ว เราก็ไม่ต้อง add reference ที่ jquery-1.2.6-vsdoc.js อีก เพราะ visual studio จะค้นหา vsdoc และ load เอง แค่เราวาง runtime library และ document file ไว้ที่เดียวกันเท่านั้น
- เพื่อทดสอบ intellisense ให้ พิมพ์ <script> block แล้ว พิมพ์ “$(“ เราได้เห็น intellesense เหมือนกับที่แสดงตามรุปด้านล่างครับ
- เป็นอันว่าจบขั้นตอนการ ลงและทดสอบ ครับ
ต่อไปลองมาทดสอบกันดูนะครับ ให้เห็นให้รู้กันไปเลย ตัวอย่างเป็นตัวอย่างง่าย ๆ คือ click ปุ่มแล้วแสดง alert window
– ให้ วาง button ตาม code นะครับ
-แล้วเพิ่ม code ใน script box ดังรูป ครับ
จาก code เราอ้างอิง ชื่อ Button1 ด้วย #Button1 นะครับ เมื่อ click ให้แสดง window มีข้อความ Hello world นั่นเอง จะได้ผลตามรูป ครับ
เป็น อันว่าจบ บทความ เรื่อง jQuery นี้แล้วนะครับ คงพอจะได้ แนวความคิดเอาไว้ต่อยอดได้นะครับ ขอให้มีความสุขกับการเขียนโปรแกรมนะครับ
ธีระพงษ์ สนะยามาลย์
s_teerapong2000@yahoo.com