วันศุกร์ที่ 31 สิงหาคม พ.ศ. 2555

Introduction to Objective-C (Cont.) (Day02 @ iDeveloper03)

เขียนได้ไป 3 ส่วนแล้ว รู้สึกชิน และชิว
เขียนได้เร็วขึ้น
และคิดได้ว่า ควรจะมีรูปประกอบไหม แต่ว่า
ประเด็นสำคัญคือไม่มี 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;
สามารถใช้ synthesize แทนการกำหนดค่าใน  get methods & set methods 
จะทำการสร้าง  get methods & set methods ให้ โดยกำหนดชื่อเป็น get และตามด้วยชื่อ Method โดยกำหนดให้ตัวแรกเป็นตัวใหญ่ นอกนั้นเหมือนเดิม
  •  @synthesize name;
    • -(void) setName : (NSString*) name;
    • -(NSString *) getName;
ประเภทของ Attribute ประกอบด้วย
readonly &  readwrite 
    • readonly : มีแค่ get methods 
      • @property(readonly) ชนิดAttribute AttributeName;
    • readwrite : มีทั้ง  get methods & set methods 
      • @property(readwrite) ชนิดAttribute AttributeName;
      • แต่ปกติจะไม่เขียนถึงอยู่แล้ว ถ้าเป็นกรณี readwrite
        • @property ชนิดAttribute AttributeName;
        • แต่ไม่นิยมใช้ เพราะจะไประบุประเภทของ setter กันแทนมากกว่า
    • หมายเหตุ ถ้าไม่มีการกำหนดจะบังคับเป็น readwrite
Setter Attribute
    • กำหนดโดยระบุรูปแบบการจองแทนว่าจะเป็น strong weak copy assign retain
      • ถ้าไม่มีการกำหนดจะบังคับเป็น assign
        • @property(__strong)  ชนิดAttribute AttributeName ;
        • @property(__weak) ชนิดAttribute  AttributeName ;
Atomicity เป็นการกำหนดลักษณะการทำงานของเทรด
    • nonatomic : กระทำพร้อมๆกันเลย โดยไม่ต้องรอการทำงานของเทรดแรก
    • atomic : รอการกระทำ ต้องทำเสร็จไปทีละเทรด
    • หมายเหตุ ถ้าไม่มีการกำหนดจะบังคับใช้เป็น atomic

  • การกำหนดค่า  Attribute นั้นสามารถกำหนดผสมกันได้
    • @property(nonatomic, strong) NSString* name;
ตัว Attribute ที่โปรแกรมทำการสร้างให้จะเป็น ชนิดเดียวกับที่กำหนด และ จะมีชื่อเป็น _ และตามด้วยชื่อของAttribute ที่กำหนด

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 อีก
ปล. เดียวมาต่อนะจร่ะ จุ๊ฟๆ
ปล. หามีข้อผิดพลาดประการใด ขออภัยมา ณ ที่นี้ด้วย











ไม่มีความคิดเห็น:

แสดงความคิดเห็น

หมายเหตุ: มีเพียงสมาชิกของบล็อกนี้เท่านั้นที่สามารถแสดงความคิดเห็น