เขียนได้เร็วขึ้น
และคิดได้ว่า ควรจะมีรูปประกอบไหม แต่ว่า
ประเด็นสำคัญคือไม่มี mac ไม่สามารถรันและเอารูปมาโชว์ได้
ถ้าจะเอารูปจริงๆ คงต้อง คัดลอกมาจากบทความ หรือสไลด์ T_T
มันจะดีหรอ อออออ เอาแบบไม่มีรูปไปก่อนแย้วกันเนอะ อิอิ
งอแงแล้ว อยากได้ mac จร้า อยากได้ อยากได้
ไม่มีตังอะ ช่วงนี้ช๊อตกันสุดๆ T______________________T
Properties
โดย อาจารย์ภราดา นาคสุข
ช่วยแก้ปัญหาในการเขียน getter และ setter ที่ทำให้เสียเวลา
โปรแกรมสามารถสร้าง Method เหล่านั้นขึ้นมาให้เอง ผ่านทาง properties
ตัวอย่างแบบไม่ใช้ Properties
man.h
@interface man : NSObject
{
NSStrint *name;
}
-(void) setName : (NSStrint *)firstName;
-(NSString *) getName;
@end
man.m
#import "man.h"
@implementation man
-(void) setName : (NSStrint *)firstName
{
name = firstName ;
}
-(NSString *) getName
{
return name;
}
@end
ลองมองในทางกลับกันดิ่ ถ้ามีตัวแปลเยอะๆแสดงว่าต้องมี set กับ get เยอะมากจริงไหมจร่ะ ดังนั้น ในเวอร์ชั่น 4.4 เป็นต้นไปจึงมีการนำเอา properties เข้ามาช่วยในการกำหนดค่า และแสดงค่า
ตัวอย่างแบบใช้ Properties
man.h
@interface man : NSObject
{
}
@property (strong) NSString *name;
@end
man.m
#import "man.h"
@implementation man
@synthesize name;
จากการใช้ properties จะเห็นได้ว่า
- ไม่ต้องสร้าง Attribute เลย เพราะตัว properties จะทำการสร้างขึ้นมาให้เอง
- เราไม่ต้องสร้าง get methods & set methods ใน .h แต่เราใช้ properties เข้ามากำหนดค่าแทน
- @properties(ประเภทของ Attribute) ชื่อ Attribute ที่ต้องการสร้าง
- @property(readonly) NSString* name;
- จะได้เป็น NSString* _name;
จะทำการสร้าง get methods & set methods ให้ โดยกำหนดชื่อเป็น get และตามด้วยชื่อ Method โดยกำหนดให้ตัวแรกเป็นตัวใหญ่ นอกนั้นเหมือนเดิม
- @synthesize name;
- -(void) setName : (NSString*) name;
- -(NSString *) getName;
readonly & readwrite
- readonly : มีแค่ get methods
- @property(readonly) ชนิดAttribute AttributeName;
- readwrite : มีทั้ง get methods & set methods
- @property(readwrite) ชนิดAttribute AttributeName;
- แต่ปกติจะไม่เขียนถึงอยู่แล้ว ถ้าเป็นกรณี readwrite
- @property ชนิดAttribute AttributeName;
- แต่ไม่นิยมใช้ เพราะจะไประบุประเภทของ setter กันแทนมากกว่า
- หมายเหตุ ถ้าไม่มีการกำหนดจะบังคับเป็น readwrite
- กำหนดโดยระบุรูปแบบการจองแทนว่าจะเป็น strong weak copy assign retain
- ถ้าไม่มีการกำหนดจะบังคับเป็น assign
- @property(__strong) ชนิดAttribute AttributeName ;
- @property(__weak) ชนิดAttribute AttributeName ;
- nonatomic : กระทำพร้อมๆกันเลย โดยไม่ต้องรอการทำงานของเทรดแรก
- atomic : รอการกระทำ ต้องทำเสร็จไปทีละเทรด
- หมายเหตุ ถ้าไม่มีการกำหนดจะบังคับใช้เป็น atomic
- การกำหนดค่า Attribute นั้นสามารถกำหนดผสมกันได้
- @property(nonatomic, strong) NSString* name;
Array in Cocoa
(NSArray , NSMutableArray)
NSArray
- เก็บกลุ่มของออบเจกต์ที่สามารถเรียงลำดับได้
- มีการเข้าถึงข้อมูลที่เริ่มต้นที่ 0
- สามารถสร้าง object แบบสุ่มได้
- ไม่สามารถลบ เพิ่ม เปลี่ยนแปลงสมาชิกได้เมื่อสร้างแล้ว
- Method ที่สำคัญ
- -(NSInteger)count : หาจำนวนสมาชิกภายในอาเรย์
- -(id)objectAtIndes : (NSUInteger)index : การกำหนดลำดับในการเข้าถึงข้อมูล
- การใช้งานตั้งแต่ XCode 4.4 สามารถ
- Literals syntax : @[obj1,obj2,.....,nil]
- จำเป็นต้องปิดท้ายที่ nil เสมอ
- Subscription ใช้ในการเข้าถึงข้อมูล ด้วยการเติม []
การสร้าง Array
NSArray* array1 = [[[NSArray alloc] init] arrayWithObjects: @"a" , @"b", nil];
- NSArray* array1 : สร้างพอยเตอร์ชี้ไปยังออบเจกส์ใหม่ภายใน Class NSArray
- [NSArray alloc] : สร้างออบเจกส์ใหม่ภายใน Class NSArray เพื่อให้พอยเตอร์มาชี้
- [[NSArray alloc] init] : กำหนดให้ออบเจกต์ใหม่นั้นมีค่าเป็นค่าเริ่มต้นตามที่คลาสนั้นกำหนดไว้
- arrayWithObjects: @"a" , @"b", nil : การใส่ข้อมูลจำนวน 2 ตัว
- โปรแกรมสามารถรู้ได้เลยว่า 2 ตัวเพราะมันนับจากการสั่ง nil แสดงว่าข้อมูลครบแล้ว ถ้าไม่ nil จะไม่สามารถรันโปรแกรมได้จะเกิด error
- เราต้องเลือกชนิดดีๆ ถ้าต้องการสร้าง array เพียงตัวเดียวต้องใช้ arrayWithObject โปรดสังเกตุว่าขาดตัว s ไป 1 ตัว
- แต่ถ้าต้องการสร้างหลายตัวต้องเติม s ด้วย ไม่งั้นหล่ะ error และจะ งง จนหากันยาว เราเจอมาแล้ว 5555 (จริงไหม ปีปี้ #แซวเล่นจร้า)
จริงๆแล้ว ไม่ต้องเขียนยาวๆดังข้างบน เขาย่อไว้ให้เราแล้ว ปีกกามันเยอะเกินไปนะจร่ะ
NSArray* array1 = [NSArray arrayWithObjects: @"a" , @"b", nil];
NSLog (@"%@", array1);
//Output : a , b
NSLog(@"%@" , [array1 objectAtIndex : 1]);
//Output : b
//การใช้ literals syntax
NSArray * array2 = @[@"a" , @"b" , @"c" , nil];
NSLog (@"%@", array2);
//output : a , b , c
//Supscription
NSLog (@"%@" array[1]);
//output : b
NSMutableArray
- สืบทอดมาจาก NSArray
- สามารถลบ เพิ่ม เปลี่ยนแปลงสมาชิกได้เมื่อสร้างแล้ว
- ไม่สนับสนุน Literals syntax (ย่อไม่ได้นะจร่ะ)
- Method หลัก
- -(void)addObject : (id)anObject
- -(void)insertObject : (id)anObject atIndex : (NSUInteger)index
- -(void)removeLastObject
- -(void)removeObjectAtIndex : (NSUInteger)index
- -(void)replaceObjectAtIndex : (NSUInteger)index withObject : (id) anObject
ตัวอย่างเช่น
NSMutableArray* array3 = [NSMutableArray array];
[array3 addObject : [@"a", @"b" , @"c"]];
// output : abc
[array3 insertObject : [@"a"] atIndex : 0];
// output : a
abc
[array3 addObject : [@"b" , @"c"]];
// output : a
abc
bc
[array3 removeObjectInRange : (NSRange){0,2}];
//output : abc
การสร้าง อาเรย์ 2 มิติ
NSArray* list = [NSArray arrayWithObject :
[NSArray arrayWithObject : @"1" , @"2" , nil],
[NSArray arrayWithObject : @"A" , @"B" , nil],
nil];
NSLog (@"List[0][1] : %@" , list[0][1]);
//output : List[0][1] : 2
การวนลูปแสดงผล
for(x in list)
NSLog (@"%@",x);
** การจะทำคอมเม้นต์โปรแกรม สามารถทำโดยการคลุมดำทั้งหมดและกด command + /
ปล. ยังไม่จบนะ เหลือเรื่อง Dictionary , for อีก
ปล. เดียวมาต่อนะจร่ะ จุ๊ฟๆ
ปล. หามีข้อผิดพลาดประการใด ขออภัยมา ณ ที่นี้ด้วย