Ưu điểm trong cách sử dụng hàm mới của Objective C

Ngay từ lúc mới chuyển sang sử dụng Xcode và Objective C, điều luôn khiến các lập trình viên bực mình là việc phải từ bỏ một thói quen khi sử dụng “dot”(.) để gọi các hàm trong ngôn ngữ khác như C++ hay .Net. Lúc đó cũng là lúc mình luôn thắc mắc là tại sao Objective không có một lựa chọn gọi hàm theo cách “bình thường” của các ngôn ngữ khác như vậy.

Nguyên nhân nằm ở cơ chế của chính loại ngôn ngữ này.

* Gọi hàm từ bộ nhớ – lkObj.doThis(): (Method Calling)

– Đây là cách gọi hàm “bình thường” của các ngôn ngữ từ trước đến nay. Cơ chế của nó chính là việc thực thi một phương thức hay một hàm bằng cách nhảy đến đia chỉ bộ nhớ và thực hiện một số chỉ định đã được định nghĩa trước (trong lúc dịch thuât – complite)

+ Ưu điểm: Việc thực thi diễn ra rất nhanh do các chỉ định đã được định nghĩa trước.

+ Nhược điểm: Mất đi tính cơ động do các hàm được tạo vào lúc run-time và được cố định vào bộ nhớ không thể thay đổi được. Cho dù bạn có sử dụng dynamic programming thì lúc run-time, hàm cũng phải được tạo ra trước sau đó mới có thể thực thi. Do đó chương trình luôn bị bó buộc vào việc chuẩn bị đầy đủ nguyên liệu trước khi sử dụng.

 

 

* Gửi thông tin thực thi – [lkObj doThis]: (Message Sending)

– Objective C sử dụng một cơ chế hoàn toàn khác. Tất cả các hàm/ phương thức được lưu trữ trong một danh sách được gọi là Runtime Lookup Table) và được quản lý bởi Objective C Runtime. Mỗi đơn vị lưu trữ được định nghĩa với 2 thành phần: Tên của hàm và địa chỉ của hàm trên bộ nhớ.

– Hiểu một cách đơn giản thì khi một hàm được gọi theo cơ chế Message Sending, địa chỉ vùng nhớ của hàm sẽ được dò tìm trên Runtime Lookup Table, dựa vào tên hàm và tham số của nó, sau đó các chỉ thị bên trong hàm mới được gọi thực hiện.

– Do phải dò tìm memory location của hàm trước khi thực hiện, nên việc thực hiện sẽ chậm hơn so với cơ chế Method Calling, nhưng ngược lại, tính linh động cao, vì với một tên hàm & tham số, địa chỉ bộ nhớ của hàm có thể thay đổi bất kỳ lúc nào trên Runtime Lookup Table, điều này mở ra khả năng thay đổi chỉ định đã được định nghĩa sẵn trước đó của hàm là hoàn toàn có thể  với ngôn ngữ Objective-C.

+ Ưu điểm:

Enable something Impossible

Cơ chế này cho phép bạn làm những điều không thể làm trên các ngôn ngữ khác:

– Có thể gọi thực thi một phương thức khi đối tượng gọi thực hiện đang trỏ đến null: [null doThis]

– Gọi thực hiện bất kỳ phương thức nào của một đối tượng (ngay cả những phương thức hiện tại chưa được định nghĩa)

– Khi một phương thức của một đối tượng được gọi, nó có thể chấp nhận thực hiện hoặc từ chối và uỷ nhiệm cho các đối tượng khác thực hiện phương thức đó.

 

Tagged: , , , , , , ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: