[Bài Học Số 2] Cơ Bản Objective Cx

19 446 3
[Bài Học Số 2] Cơ Bản Objective Cx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Lập trình ios

1.1. Lớp 1.1.1. Các khái niệm bản 1.1.1.1. Định nghĩa lớp Một lớp trong Objective-C được định nghĩa gồm 2 file thành phần tương tự C, C++. Một file *.h định nghĩa trước các biến thành phần và tên các phương thức, file *.m định nghĩa phần thực thi cho các phương thức trong file *.h File ClassName.h PHP Code: #import <headerFile.h> @interface ClassName { variable1 declaration; variable2 declaration; } method1 declaration; method2 declaration; @end Objective-C sử dụng từ khóa @interface để khai báo một tên lớp trong file h. Từ khóa @end được sử dụng ở cuối phần khai báo. File ClassName.m PHP Code: #import “ClassName.h” @implementation ClassName -method 1 //triển khai phương thức 1 -method 2 // triển khai phương thức 2 @end Objective-C sử dụng từ khóa @implementation để khai báo phần thực thi thực sự của lớp trong file m. Từ khóa @end được sử dụng ở cuối phần khai báo. Ví dụ: PHP Code: MyClass.h @interface MyClass { int a; int b; } -(void) setvara : (int) x; -(void) setvarb : (int) y; -(int) add; @end MyClass.m PHP Code: #import”MyClass.h” @implementation MyClass -(void) setvara int) x { a=x; } -(void) setvarb int) y { b=y; } -(int) add { return a+b; } @end 1.1.1.2. Thuộc tính Cú pháp khai báo thuộc tính: PHP Code: [Access Privilege] TypeName varName; Ví dụ PHP Code: @private int att1; NSString str1; @protected int att2; @public NSString str2; int att3; Mặc định khi không sử dụng từ khóa quyền truy xuất là @protected 1.1.1.3. Phương thức Cú pháp định nghĩa một phương thức PHP Code: [Access Privilege](return_type) methodname: (type1) para1 : (type2) para2 (…); Gọi phương thức PHP Code: [object methodname:para1 : para2…]; Ví dụ: Khai báo PHP Code: -(MyClass*) constructor: (int) a : (int) b; Triển khai PHP Code: -(MyClass*) constructor: (int) a : (int) b { self = [super init]; if(self) { var1 = a; var2 = b; } return self; } } Lời gọi phương thức như sau PHP Code: [myClassObject constructor: 100 : 200]; Trong Objective-C chỉ 2 khái niệm quyền truy xuất đến phương thức: truy xuất hoàn toàn qua lớp (public static) và truy xuất hoàn toàn qua đối tượng (public) Objective-C qui định phần định nghĩa truy xuất như sau Phương thức truy xuất thông qua tên lớp sẽ ký hiệu là dấu + Phương thức truy xuất thông qua đối tượng sẽ ký hiệu là dấu – PHP Code: @interface MyClass: NSObject -(MyClass*) staticMethod: (int) a : (int) b; -(MyClass*) publicMethod: (int) a : (int) b; @end Trong trường hợp phương thức nhiều tham số, và để thể hiện được ý nghĩa của các tham số trong lời gọi phương thức, Objective-C cho phép một cú pháp khai báo khác cho phương thức như sau: PHP Code: [Access Privlilege](return_type) methodPara1: (type) para1 andPara2: (type) pa ra2; Lời gọi phương thức khi đó sẽ như sau: PHP Code: [object methodPara1: value1 andPara2: value2]; Ví dụ: PHP Code: -(void) setX: (int) x Y: (int) y; PHP Code: -(void) setX: (int) x Y: (int) y { var1 = x; var2 = y; } PHP Code: [myObject setX: 15 Y: 20]; 1.1.2. Kế thừa Tính kế thừa trong Objective-C tương tự trong các ngôn ngữ khác như C++,… PHP Code: #import “SuperClass.h” #import <headerFile.h> @interface ClassName:SuperClass { variable1 declaration; variable2 declaration; } method1 declaration; method2 declaration; @end Ví dụ: PHP Code: #import<Foundation/NSObject.h> @interface MyClass:NSObject { int a; int b; } -(void) setvara : (int) x; -(void) setvarb : (int) y; -(int) add; @end Trong Objective-C, thực sự tất cả các lớp khi tạo ra đều kế thừa từ lớp NSObject. 1.1.3. Phương thức tạo Trong Objective-C không khái niệm phương thức tạo cho một lớp. Tất cả các đối tượng của một lớp phải được cấp phát thông qua phương thức alloc và init. PHP Code: MyClass *myObject = [[MyClass alloc]init]; Trong đó phương thức alloc là cấp phát vùng nhớ, còn phương thức init như là một phương thức tạo mặc định trong Objective-C, được định nghĩa trong lớp NSObject. PHP Code: -(id) init; Ta thường định nghĩa lại phương thức tạo tham số của một lớp như sau: PHP Code: #import “SuperClass.h” #import <headerFile.h> @interface MyClass: NSObject { int var1; int var2; } -(MyClass*) constructor: (int) a : (int) b; @end PHP Code: #import “MyClass.h” @implementation MyClass -(MyClass*) constructor: (int) a : (int) b { self = [super init]; if(self) { var1 = a; var2 = b; } return self; } @end Từ khóa super con trỏ trỏ đến lớp cha của lớp hiện tại, tương tự như base trong C++ hoặc super trong Java. Từ khóa self là con trỏ đại diện cho lớp hiện tại, tương tự con trỏ this trong C++ hay Java. 1.1.4. Properties Trong Objective-C hỗ trợ tính năng Properties, cho phép chúng ta định nghĩa các bộ truy xuất (setter/getter) vì vậy sẽ nhiều lợi ích sử dụng khi truy xuất đến các biến thể hiện của đối tượng. Định nghĩa trong file.h: PHP Code: @property (<attributes>) type propertyName; Thực thi trong file.m: PHP Code: @synthesize propertyName; Truy xuất đến properties thông qua cú pháp object.property PHP Code: #import <Foundation/Foundation.h> @interface Address : NSObject { int countryCode; int cityCode; } @property (readonly) int countryCode; @property int cityCode; … @end PHP Code: #import “Address.h” @implementation Address @synthesize countryCode; @synthesize cityCode; … @end PHP Code: Address *address = [[Address alloc] init]; Int code = address.countryCode; address.cityCode = 99; Các thuộc tính cho Properties Writability readwrite: chỉ ra Properties thể đọc và ghi, thuộc tính này là mặc định read-only: chỉ ra Properties chỉ thể đọc. Setter Semantics assign: là thuộc tính mặc định. Ta thường sử dụng assign cho các kiểu vô hướng như NSInteger, CGRect… Ta thể hình dung như sau PHP Code: @interface Test5 : NSObject { @private NSString *sVar; } @property (readwrite, assign) NSString *sVar; @end Properties này tương tự như settor sau PHP Code: -(void)setSVar:(NSString*)inSVar { if (self->sVar != inSVar){ [self->sVar release]; self->sVar = [inSVar retain]; } } retain: retain nên được triệu gọi trên đối tượng được chỉ định. copy: một bản sao của đối tượng sẽ được sử dụng cho đối tượng chỉ định. Ta thể hình dung như sau PHP Code: @property (readwrite, copy) NSString *sVar; Properties này tương tự như settor sau PHP Code: -(void)setSVar:(NSString*)inSVar { if (self->sVar != inSVar){ [self->sVar release]; self->sVar = [inSVar copy]; } } Ta sử dụng chỉ định copy khi mà khả năng tham số sVar là đối tượng thể thay đổi Những ràng buộc phụ thuộc vào việc bạn chọn sử dụng hoặc không sử dụng bộ thu gom rác Nếu bạn không sử dụng bộ thu gom rác, với Properties của đối tượng bạn phải chỉ rõ assign, retain hay copy, nếu không trình biên dịch sẽ cảnh báo Nếu bạn sử dụng bộ thu gom rác, bạn sẽ không bị cảnh báo nếu không chỉ định assign, retain hay copy (mặc định khi đó là assign), trừ khi kiểu của Properties là một lớp thích hợp với NSCopying. Để mặc định thường là những gì bạn muốn, tuy nhiên, nếu đối tượng thể sao chép thì để bảo tồn tính bao đóng bạn thường muốn làm một bản sao chép riêng cho đối tượng. Nếu bạn sử dụng bộ thu gom rác thì assign và retain hiệu lực như nhau Atomicity: thuộc tính này chỉ ra Properties là không atomicity với từ khóa nonatomic. Việc này tương tự như đồng bộ hóa trong khái niệm Thread, Properties này sẽ bị block và thực hiện đồng bộ. Mặc định là atomic. [...]...1.2 Category Khi ta muốn thêm một số phương thức vào một lớp sẵn, thông thường ta sẽ mở rộng lớp đó bằng cách viết lại mã nguồn Objective- C cung cấp tính năng Category cho phép ta mở rộng lớp mà không cần phải viết lại mã nguồn của lớp cũ Category cho phép ta mở rộng lớp cũ trong... MyClass -(void) print; @end MyClass.m PHP Code: #import “MyClass.h” @implementation MyClass -(void) print { //to do print } Ta muốn thêm một một phương thức newMethod, ta sử dụng tính năng Category của Objective- C như sau MyCategory.h PHP Code: #import “MyClass.h” @interface MyClass (MyNewCategory) -(void) newMethod; @end MyCategory.m PHP Code: #import “MyCategory.h” @implementation MyClass (MyNewCategory)... nhưng không được trùng tên Trong Category không cho phép thêm các biến thể hiện Ngoài mục đích mở rộng, Category thường được sử dụng để “định nghĩa” các phương thức “private” (không được hỗ trợ trong Objective- C) PHP Code: // =========================== // = File: SomeClass.m // =========================== #import “SomeClass.h” // ================================= // = Interface for hidden methods... SomeClass *ptr = [[SomeClass alloc] init]; // Display message (including messages from hidden methods) [ptr msg]; // Call a class method [SomeClass classMsg]; return 0; } 1.3 Posing Pose là một tính năng của Objective- C cho phép lớp con thay thế (pose – in place of) lớp cha mà nó kế thừa trong một ngữ cảnh nhất định PHP Code: @interface Fraction -(void) print; @end PHP Code: #import “Fraction.h” @implementation . 1.1. Lớp 1.1.1. Các khái niệm cơ bản 1.1.1.1. Định nghĩa lớp Một lớp trong Objective- C được định nghĩa gồm 2 file thành phần tương. trường hợp phương thức có nhiều tham số, và để thể hiện được ý nghĩa của các tham số trong lời gọi phương thức, Objective- C cho phép một cú pháp khai

Ngày đăng: 23/02/2013, 09:29

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan