Objective-C Property(strong,nonatomic) , Weak , Strong type (iOS, iPhone, iPad) |
Objective-C Property(strong,nonatomic) , Weak , Strong type (iOS, iPhone, iPad) การเขียน App โปรแกรมบน iOS สำหรับ iPhone/iPad บนภาษา Objective-C ในการประกาศตัวแปร Variable และ Property ผ่านการสร้างจาก IBOutlet เราจะเห็นว่าบางครั้งโปรแกรม Xcode มีการสร้าง Keyword ต่าง ๆ เช่น @property (strong,nonatomic) หรือ __strong หรือ __weak ตัวแปรเหล่านี้มันคืออะไร ?? และบางครั้งเราก็ไม่จำเป็นจะต้องใส่มัน แต่มันก็ยังทำงานได้ตามปกติ เรามาทำความรู้จักคร่าว ๆ ว่ามันคืออะไร และแต่ล่ะตัวมีหน้าที่อะไร และมีผลอะไรต่อโปรแกรมที่เราจะเขียนขึ้นมาบ้าง
บทความนี้จะอธิบายเพียงแค่ความหมายคร่าว ๆ เท่านั้น ส่วนรายละเอียดลึกจริง ๆ อาจจะต้องไปหาอ่านจากเว็บภาษาอังกฤษของ Apple โดยตรง หรือถ้ามีเวลารอให้เก่งและรู้มากกว่านี้ก่อน อาจจะมาเขียนเพิ่มเติมให้ครับ
ปกติแล้วเราจะเปิดตัวแปร Method หรือ Function ต่าง ๆ เราจะประกาศไว้ที่ Class ที่นามสกุล .h เช่น
@interfaceViewController : UIViewController
{
// ตำแหน่งสำหรับตัวแปรต่าง ๆ
}
// ตำแหน่งสำหรับ ประกาศ property และ method (function)
@end
Ex 1
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
IBOutlet UITextField *txtName;
__strong IBOutlet UITextField *txtEmail;
__weak IBOutlet UILabel *lblResponse;
}
@property (strong,nonatomic) NSString *strName;
- (IBAction)OKClick:(id)sender;
@end
จากตัวอย่างจะเห็นว่า ตำแหน่งของตัวแปร มีกาศประกาศแบบปกติ และ แบบ _week และตำแหน่งของ property และ method จะมีการประกาศ @property (strong,nonatomic) เรามาทำความเข้าในกับความหมายของมัน
__strong (Strong type)
เป็นการประกาศค่าตัวแปรที่เป็นค่า Default ที่ประกาศด้วย __strong หรือจะไม่ประกาศก็จะมีค่าเป็น Stong เป็นปริยาย โดย Strong type หมายถึงค่าตัวแปร จะยังอยู่ตลอดเวลา ไม่หายหรือถูกเปลี่ยนแปลงเป็นค่าอื่น และสามารถที่จะเรียกใช้ได้ตลอดเวลา ข้อเสียของ Strong type คือโปรแกรมอาจจะใช้ Memory จำนวนมากโดยไม่มีการเคลียร์หรือทำให้เป็น nil ซึ่งก็มีโอากาสให้เกิด Memory Leak เช่นเดียวกัน
__weak (Weak type)
เป็นการประกาศค่าตัวแปรที่จะต้องระบุด้วย __weak โดยค่าตัวแปรที่ถูกประกาศด้วย Strong type ที่เป็น Pointer เมื่อค่าที่กำลังชี้ไปยังตัวแปรอื่น ๆ ด้วย Pointer ถูกเปลี่ยน ค่าตัวแปรที่ถูกประกาศด้วย _weak ก็จะถูกเปลี่ยนเป็น nil หรือค่าว่างขึ้นมาทันที
Ex
NSString *a = @"strong";
__strong NSString *b = a;
a = @"A is Strong";
ผลลัพธ์ที่ได้คือ a => A is Strong และ b => strong
แต่ถ้า b เป็น weak type ผลที่ได้จะต่างออกไปดังนี้
NSString *a = @"strong";
__weak NSString *b = a;
a = @"A is still Strong";
ผลลัพธ์ที่ได้คือ a => A is still Strong และ b => nil
จากตัวอย่างที่ 2 จะเห็นค่าตัวแปร b ซึ่งเป็น Pointer ชี้ไปยังค่าตัวแปร a และเมื่อ a มีการเปลี่ยนแปลงค่า ดังนั้นตัวแปร b ซึ่งเป็น Weak type ก็จะถูกเปลี่ยนเป็น nil (ว่าง) ในทันที
@property (strong,nonatomic)
เป็นการประกาศ property ของ class โดยหลัก ๆ จะอยู่ 2 อารกิวเมนต์ โดย อารกิวเมนต์แรกจะมีค่าระหว่าง strong / weak และ อารกิวเมนต์สองจะมีค่าระหว่าง nonatomic / atomic
nonatomic ไม่ให้ตัวแปลทำงานในแบบ thread
atomic ให้ตัวแปลทำงานในแบบ thread
และถ้าไม่กำหนดจะมีการเป็น strong และ atomic
สำหรับความหมายคร่าว ๆ ก็มีเพียงเท่านี้ ส่วนการนำไปใช้งานตรงไหน และใช้ยังไงยังไงให้เหมาะสมกับการเขียนโปรแกรม ไว้บทความหลัง ๆ จะได้อธิบายและยกตัวอย่างการใช้งานประกอบ
ผิดพลาดประการใดขออภัยมา ณ ที่นี้ด้วยครับ
|
ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท
|
|
|
By : |
ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ) |
|
Score Rating : |
|
|
|
Create/Update Date : |
2012-10-21 17:15:58 /
2017-03-25 22:49:31 |
|
Download : |
No files |
|
Sponsored Links / Related |
|
|
|
|
|
|
|