2012-06-18 14 views
23

Bằng cách đọc một số văn bản, đặc biệt là tài liệu iOS về đại biểu, tất cả các phương thức giao thức được gọi là móc mà đối tượng đại biểu tùy chỉnh cần triển khai. Nhưng một số sách khác, đặt tên cho các móc mócgọi lại, sự khác biệt giữa chúng là gì? Họ chỉ là tên khác nhau nhưng cùng một cơ chế? Ngoài Obj-C, một số ngôn ngữ lập trình khác, chẳng hạn như C, cũng có móc móc, tình huống tương tự với Obj-C?Sự khác biệt giữa móc và gọi lại là gì?

Trả lời

19

Thuật ngữ ở đây hơi mờ. Nói chung hai nỗ lực để đạt được kết quả tương tự.

Nói chung, gọi lại là chức năng (hoặc đại biểu) mà bạn đăng ký với API để được gọi vào thời điểm thích hợp trong quy trình xử lý (ví dụ: để thông báo cho bạn biết rằng quá trình xử lý ở một giai đoạn nhất định)

A móc theo truyền thống có nghĩa là một cái gì đó chung chung hơn một chút phục vụ mục đích sửa đổi cuộc gọi đến API (ví dụ sửa đổi các tham số đã truyền, theo dõi các hàm được gọi). Trong ý nghĩa này, nó thường thấp hơn nhiều so với những gì có thể đạt được bằng các ngôn ngữ bậc cao như Java.

Trong bối cảnh iOS, từ treo nghĩa là điều tương tự chính xác như callback trên

8

Nhiệm kỳ hai rất giống nhau và đôi khi được sử dụng hoán đổi cho nhau. Một móc là một tùy chọn trong thư viện là mã người dùng có thể liên kết một hàm để thay đổi hành vi của thư viện. Hàm thư viện không cần chạy đồng thời với mã người dùng; như trong một destructor. Một cuộc gọi lại là một loại móc cụ thể trong đó mã người dùng sẽ bắt đầu cuộc gọi thư viện, thường là một cuộc gọi I/O hoặc cuộc gọi GUI, cung cấp cho contol qua hạt nhân hoặc hệ thống con GUI. Quá trình kiểm soát sau đó 'gọi lại' mã người dùng trên một ngắt hoặc tín hiệu để mã người dùng có thể cung cấp trình xử lý.

Trước đây, tôi đã thấy móc được sử dụng cho trình xử lý ngắt và gọi lại được sử dụng cho trình xử lý sự kiện GUI. Tôi cũng thấy móc được sử dụng khi thường trình được liên kết tĩnh và gọi lại được sử dụng trong mã động.