Theo tôi hiểu Mục tiêu C/iOS là ngôn ngữ rất năng động, vậy nó có động như Ruby không? Nó có tương đương với method_missing không? Tôi hỏi cùng một câu hỏi cho js Does Javascript have something like Ruby's method_missing feature? và đã thất vọng rằng js không hỗ trợ nó được nêu ra.Tương đương với Ruby method_missing trong mục tiêu C/iOS
Trả lời
Mục tiêu-C là động, mặc dù đã là một lập trình viên Ruby, tôi cho rằng nó không hoàn toàn giống với Ruby.
Mục tiêu-C có tương đương với method_missing. Bạn sẽ muốn ghi đè lên cả forwardInvocation:
và methodSignatureForSelector:
và làm theo lời khuyên quan trọng này của Apple:
quan trọng Để đáp ứng với phương pháp mà đối tượng của bạn không tự nhận ra, bạn phải ghi đè methodSignatureForSelector: ngoài việc forwardInvocation :. Cơ chế chuyển tiếp thư sử dụng thông tin thu được từ phương thứcSignatureForSelector: để tạo đối tượng NSInvocation được chuyển tiếp. Phương thức ghi đè của bạn phải cung cấp chữ ký phương thức thích hợp cho bộ chọn đã cho, hoặc bằng cách định dạng trước một hoặc bằng cách yêu cầu một đối tượng khác cho một.
Không sử dụng doesNotRecognizeSelector:
như Apple cảnh báo rằng it must always result in an exception being thrown.
Xin vui lòng xem các tài liệu hướng dẫn lớp NSObject để biết thêm chi tiết: http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html
Tôi đoán method_missing là phương thức gọi lại được gọi khi đối tượng thiếu phương thức nhất định. Vâng, bạn có thể sử dụng phương thức respondsToSelector để kiểm tra xem một đối tượng có thể trả lời một phương thức hay không. Đó là một phương thức được khai báo trong giao thức NSObject. Vì vậy, thay vì nhận được method_missing được gọi sau khi nhận ra rằng một số phương thức bị thiếu, bạn có thể kiểm tra nó trước khi.
if ([myObject respondsToSelector:@selector(someMethodThatMightBeMissing:)])
NSLog(@"The method is missing");
'respondsToSelector:' trong Objective-C tương ứng với 'respond_to?' Trong Ruby, không phải 'method_missing'. – louielouie
Của bạn có vẻ đơn giản hơn louielouie sự khác biệt vì tôi không thể đánh giá như newbie cảm ơn :) – user310291
Tôi khuyên bạn nên kiểm tra xem một đối tượng có thể trả lời một phương pháp hay không. Bạn hầu như sẽ muốn sử dụng phương pháp này khi bạn nghi ngờ một đối tượng có thể không trả lời một phương thức, đó là một loại phòng ngừa. Nếu một đối tượng hoặc người tiền nhiệm của nó (s) không có phương pháp như vậy, chương trình của bạn sẽ sụp đổ. Nhưng gọi một phương thức chỉ với điều kiện mà đối tượng đáp ứng với nó sẽ ngăn chương trình của bạn bị rơi. phương thức method_missing theo như tôi hiểu là một phương thức được gọi khi tình huống như vậy xảy ra và không cho phép chương trình của bạn bị lỗi. Do đó, phương thức cũ là dành cho cheking và sau đó là xử lý một trường hợp. –
Tôi đã thực hiện mô hình này dựa trên các ví dụ về cách thêm các phương pháp tương tự đến số UITextField
và một lớp con UITextView
: https://stackoverflow.com/a/19661059/171933
Tận hưởng!
- 1. Python tương đương với 'method_missing' của Ruby '
- 2. Ruby có một method_missing tương đương với các biến mẫu không xác định?
- 3. Có tương đương với method_missing của Ruby bằng các ngôn ngữ khác không?
- 4. Tương đương Sscanf trong mục tiêu-C
- 5. Mục tiêu-C tương đương với "ghi đè" trong C#
- 6. Tương đương với Math.abs() trong Mục tiêu-C là gì?
- 7. Pygame tương đương với Ruby?
- 8. Tương đương với "tiếp tục" trong Ruby
- 9. Tương đương với Array.some trong ruby / rails
- 10. Mục tiêu-C HashMap tương đương
- 11. Mục tiêu C tương đương với javascripts setTimeout?
- 12. Mục tiêu C tương đương với ArrayList của Java
- 13. tương đương với chữ "có" của Ruby trong Ruby
- 14. Có tương đương sqlite .dump trong mục tiêu-c không?
- 15. Ruby tương đương với Python cho/else
- 16. Ruby tương đương với $ của PHP $
- 17. metric_fu tương đương với ruby 1.9.x
- 18. PHP tương đương với biểu tượng Ruby
- 19. Python tương đương với Perl/Ruby || =
- 20. Ruby file_get_contents tương đương
- 21. Tương đương mục tiêu C của MessageDigest trong Java?
- 22. ruby / ray tương đương với javascript decodeURIComponent?
- 23. Tăng tương đương với tiêu chuẩn :: async()
- 24. tương đương với = ~ của ruby trong php là gì?
- 25. Tương đương với chuỗi kiểm tra của ruby () trong python
- 26. Ruby có tương đương với TimeSpan trong C# không?
- 27. Tương đương với Ruby Enumerable # each_slice trong Javascript?
- 28. Tương đương irb của Ruby trong Perl?
- 29. Mảng # xoay tương đương trong ruby 1.8.7
- 30. Tương đương "sys.stdout.write()" trong Ruby là gì?
+1 cho câu trả lời hoàn hảo! – Vignesh
Đồng thời xem phần về [Chuyển tiếp thư] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtForwarding.html#//apple_ref/doc/uid/TP40008048- CH105) trong Hướng dẫn thời gian chạy Objective-C. –