2010-05-16 25 views
5

Tôi không thể tìm thấy câu trả lời này ở bất cứ đâu. Có nghĩa là gì khi có tham số người gửi trong tiêu đề phương thức? Nó có đại diện cho cá thể gọi là nó, hay phương pháp gọi là nó?Người gửi là gì?

Trả lời

3

Không có ma thuật nào liên quan. Có lẽ bạn đang nói về các phương thức được liên kết với một số thành phần giao diện người dùng bởi Interface Builder, đúng không?

- (IBAction) userDidPressButton: (id) sender {...} 

IBAction là macro mở rộng để làm mất hiệu lực. Nó chỉ đơn giản là một cú pháp cú pháp đánh dấu các phương pháp bạn muốn có sẵn trong bộ dựng giao diện. Bây giờ khi bạn kết nối phương pháp này đối với một số yếu tố giao diện, nói một nút, IB gọi addTarget ... phương pháp vào nút:

[button addTarget:yourObject action:@selector(userDidPressButton:) forEvent:...]; 

Và khi bạn nhấn nút, nó đi qua danh sách các hành động và cháy userDidPressButton, chuyển chính nó làm đối số đầu tiên. Điều này có lẽ không hữu ích lắm cho các nút, nhưng bạn cũng có thể sử dụng cùng một cơ chế để thay đổi các sự kiện từ thanh trượt và trong trường hợp đó, bạn có thể sử dụng đối số người gửi để nhận giá trị thanh trượt.

+1

Phần sau của câu trả lời của bạn bao gồm Cocoa Touch, nhưng không chính xác cho Cocoa, trong đó mỗi điều khiển chỉ có một mục tiêu và hành động cùng một lúc. Ngoại lệ duy nhất là NSTableView và NSOutlineView, chỉ có một mục tiêu trên mỗi thể hiện nhưng có hai bộ chọn hành động cho mỗi trường hợp (một cho các nhấp chuột, một cho các nhấp đúp). –

+0

Vâng, tôi chỉ làm việc với Cocoa Touch, cảm ơn bạn đã làm rõ. – zoul

4

Có nghĩa là gì khi có tham số người gửi trong tiêu đề phương pháp? Nó có đại diện cho cá thể gọi là nó, hay phương pháp gọi là nó?

Xem loại đối số. Rất có thể là id. Đó là kiểu của một con trỏ đối tượng. Bạn chính xác rằng đó là trường hợp đã gửi tin nhắn.

Bạn có thể chuyển một bộ chọn tin nhắn cho một tin nhắn, nhưng loại cho điều đó là SEL, không phải id. Tương tự, bạn có thể vượt qua triển khai phương pháp phương pháp đối với thư nhưng loại cho điều đó là IMP, không phải id.

Phương thức lấy một đối số sender thường là phương thức hành động, thường được xác định theo loại trả về IBAction. Như zoul đã nói, IBAction mở rộng đến void cho trình biên dịch, cho biết rằng phương thức không trả về một giá trị. Lý do để có IBAction là Trình tạo giao diện tìm kiếm các phương thức có kiểu trả về là IBAction và phát hiện chúng là các hành động mà bạn có thể điều khiển đến.

Để biết thêm thông tin về Cocoa (Mac OS X), hãy xem “The Target-Action Mechanism” in the Cocoa Fundamentals GuideControl and Cell Programming Topics for Cocoa.
Để biết thêm thông tin về Cocoa Touch (iPhone/iPod touch/iPad), hãy xem “The Target-Action Mechanism” in the UIControl class reference.

1

Nguồn gốc có rất nhiều cách kỹ thuật để mô tả điều này, Nhưng trong lý thuyết 'không', đối số người gửi mà nó vượt qua chỉ là đối tượng GUI chuyển nó.

Vì vậy, nếu bạn liên kết phương pháp này với một nút cụ thể, chúng tôi sẽ gọi Button1, người gửi là Button1 và với tất cả thông tin có sẵn cho nút. Kích thước, văn bản, v.v.

hy vọng điều này là đủ.

Bryan

Các vấn đề liên quan