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
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.
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 Guide và Control 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.
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
- 1. Nếu tôi gửi một đối tượng python 'Signal' từ một hàm, đối số "người gửi" sẽ là gì?
- 2. Phương pháp tốt để ngăn người dùng gửi biểu mẫu hai lần là gì?
- 3. "k.send: hello" - nếu k là "người nhận", người gửi là ai?
- 4. Gửi trên Facebook - Cách tìm ra người nhận thư là
- 5. Lời hứa của mọi người là gì?
- 6. Tác nhân người dùng iPad là gì?
- 7. "Người quản lý" trong django là gì?
- 8. Dòng thông điệp gửi đi của WCF là gì
- 9. Các yêu cầu để gửi email bằng PHP là gì?
- 10. MailMessage đặt Tên người gửi
- 11. Câu chuyện của người dùng là gì và không phải là gì?
- 12. Người gửi thư không gửi thư, có đường ray 3
- 13. PHP - gửi tệp cho người dùng
- 14. Object Tên người gửi và EventArgs
- 15. Tiếp tục yêu cầu Người gửi (Đường dẫn trở lại, Người gửi hoặc Từ) bắt buộc để gửi tin nhắn
- 16. Có nên gửi tiêu đề "Ngày" qua email là giờ địa phương hoặc UTC của người gửi không?
- 17. Thêm người gửi hành động vào jpanel
- 18. Trạng thái giao diện người dùng là gì?
- 19. 'Giao diện người dùng phong phú' có nghĩa là gì?
- 20. Tên đại lý người dùng Google PageSpeed là gì?
- 21. TNS: người nghe trong ngữ cảnh của Oracle là gì?
- 22. Chuỗi tác nhân người dùng của Chromium là gì?
- 23. Tác nhân người dùng Samsung s3 là gì?
- 24. Visual Studio xem xét "Mã người dùng" là gì?
- 25. Người gửi sao chép Google App Engine
- 26. Gửi email kích hoạt tới người dùng
- 27. người gửi bên trong tương lai
- 28. Nhận người gửi ip từ gói multicast
- 29. Tên người gửi UTF-8 trong Zend_Mail?
- 30. AMQP/RabbitMQ người gửi trong AVR (Arduino)
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). –
Vâng, tôi chỉ làm việc với Cocoa Touch, cảm ơn bạn đã làm rõ. – zoul