Contructors trong Objective-C

Một phần của tài liệu [Bài Học Số 1] Cơ Bản Objective Cx (Trang 33 - 34)

Khởi tạo một object mới trong Objective-C gồm 2 bước. • Tạo vùng nhớ lưu trữ object

• Khởi tạo trạng thái của object

Đầu tiên là khởi tạo vùng nhớ trong heap (các objects trong Objective-C chỉ có thể khởi tạo và làm việc trong heap, nó không thể thao tác trong stack). Tiếp theo chúng ta cần gọi method được gọi là initializer, được coi như là một dạng contructor của Objective-C (nhưng thực chất chỉ là một method thông thường, ta có thể đặt tên tùy ý). Hàm này có chức năng khởi tạo các giá trị variables cần thiết.

Đầu tiên chúng ta coi qua một ví dụ về việc khai báo trong class như thế nào. Đầu tiên là interface

PHP Code: PHP Code:

@interface Person : NSObject { int age; NSString* name; int height; }

Tiếp theo là implementation PHP Code:

PHP Code:

@implementation Person -(id)init

{

self = [super init]; if (self) { age = 0; name = @””; height = 0; } return self; }

Chúng ta chú ý có một message được gửi gọi method init, đây là initializer method cơ bản mà NSObject có. Do đó việc chúng ta cần làm là override nó. Chúng ta phân tích đoạn code trên một chút, ta thấy dòng self = [super init]; cho phép class cha có thể khởi tạo (class cha ở đây là NSObject và hàm khởi tạo mặc định của nó là init) và kiểm tra kết quả của nó ở dòng tiếp theo. Cuối method ta trả về kết quả sau khi khởi tạo chúng.

Tiếp theo chúng ta sẽ coi cách khởi tạo object PHP Code:

#import <Foundation/Foundation.h> #import “Person.h”

int main (int argc, const char *argv[]) {

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; Person *myPerson = [[Person alloc] init];

[pool drain]; return 0; }

Như chúng ta thấy ở dòng lệnh Person *myPerson = [[Person alloc] init]; đầu tiên chúng ta gửi message alloc để tạo vùng nhớ cho object và trả về instance, alloc method là một class methods của NSObject. Tuy nhiên alloc không khởi tạo variables cho instance, do đó chúng ta cần gọi thêm hàm init cho nó. Để rõ ràng hơn, chúng ta có thể chia phần code làm 2 giai đoạn rõ ràng.

PHP Code: PHP Code:

#import <Foundation/Foundation.h> #import “Person.h”

int main (int argc, const char *argv[]) {

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; Person *myPerson = [Person alloc];

myPerson = [myPerson init]; [pool drain];

return 0; }

ở objective C và C cũng có sợ khác nhau giống như của C++ và C

từ khóa +new và +alloc/-init đều cùng là cấp phát động, nó tương tự với new và malloc của C++ và C, thông thường, nếu khôg có gì đặc biệt thì bạn nên dùng new thay vì dùng

init/alloc Headers

để lập trình với ngữ pháp của ngôn ngư C, bạn phải include thư viện Trích dẫn:

#include <Foundation/NSArray.h>

ngoài ra, bạn cũng có thể sư dụng từ khóa thuần Objective C là import Trích dẫn:

#import <Foundation/NSArray.h> (adsbygoogle = window.adsbygoogle || []).push({});

để tránh việc đệ quy trong việc include các thư viện, bạn sử dụng #ifdef Trích dẫn:

#ifndef HAVE_NSARRAY_H #define HAVE_NSARRAY_H

#include <Foundation/NSArray.h> #endif

Một phần của tài liệu [Bài Học Số 1] Cơ Bản Objective Cx (Trang 33 - 34)