Tôi có một lớp sử dụng resolveInstanceMethod
để tự động triển khai các phương pháp. Khi tôi gọi các phương thức được triển khai động từ các phần khác của mã, trình biên dịch phát ra cảnh báo rằng đối tượng đó có thể không phản hồi với bộ chọn. Tôi muốn trình biên dịch không phát ra các cảnh báo như vậy cho lớp này, nhưng tôi không muốn chặn các cảnh báo khi tôi gọi một bộ chọn không hợp lệ trên các lớp khác. Điều này có thể không?Làm thế nào tôi có thể nói với trình biên dịch rằng lớp của tôi giải quyết các phương thức động?
Trả lời
Giả sử bạn biết chữ ký phương pháp đó sẽ được tự động giải quyết tại thời gian biên dịch, bạn có thể tuyên bố 'em trong một thể loại không chính thức:
@interface MyDynamicallyResolvingClass(MethodsThatWillResolveAtRuntime)
... declare the methods here ...
@end
Không cần phải cung cấp một thực hiện.
Nếu bạn không biết chữ ký - nếu tên phương thức cũng là động - thì bạn sẽ cần sử dụng -performSelector:
(hoặc biến thể đối số đơn hoặc kép) hoặc bạn có thể muốn sử dụng NSInvocation, trừ khi hiệu suất là một mối quan tâm lớn (nếu có, có những giải pháp thay thế có ý nghĩa hơn đáng kể).
Sử dụng performSelector:
Đó là tương đương với gửi tin nhắn trực tiếp đến người nhận, tuy nhiên, nó cho phép bạn gửi tin nhắn mà không được xác định cho đến khi thời gian chạy.
Nếu phương pháp của bạn mất một hoặc hai đối số, bạn có thể sử dụng các chị em của phương pháp này: – performSelector:withObject:
và – performSelector:withObject:withObject:
Nếu phương pháp của bạn có nhiều hơn hai đối số, hoặc lập luận mà không phải là các loại đối tượng, câu trả lời này là không thích nghi.
- 1. Tại sao Visual Studio nói với tôi rằng tôi có "trình biên dịch tạo tham chiếu" khi tôi cố gắng đổi tên một phương thức?
- 2. Generics, inheritance, và phương thức giải quyết thất bại của trình biên dịch C#
- 3. Làm thế nào tôi có thể nói trong Linux rằng quá trình gửi quá trình của tôi một tín hiệu
- 4. Sử dụng phương thức abs() trong java. Trình biên dịch của tôi không biết phương thức
- 5. Làm thế nào tôi có thể giải các phương trình bằng Python?
- 6. Tham số động làm cho trình biên dịch nghĩ rằng phương thức trả về là động
- 7. tôi không thể biên dịch phương pháp
- 8. Tôi có thể buộc JVM thực sự biên dịch một phương thức nhất định không?
- 9. Làm thế nào tôi có thể giải quyết đa thức bậc năm trong C++
- 10. Làm thế nào tôi có thể xác định lại các phương thức lớp Perl?
- 11. C# Làm thế nào tôi có thể giải quyết các giới hạn khi sử dụng DirectoryInfo?
- 12. Làm thế nào để tôi nói với matplotlib rằng tôi đã hoàn thành một âm mưu?
- 13. Làm cách nào tôi có thể xác định động một phương thức bí danh cho một phương thức lớp?
- 14. Không thể giải quyết một lớp tĩnh lồng nhau thừa hưởng quá trình biên dịch
- 15. Làm thế nào nói với javadoc rằng thời gian của tôi không kết thúc một câu
- 16. Mục tiêu-c: Làm thế nào tôi có thể lấy dụ lớp trong phương thức lớp
- 17. Làm thế nào tôi có thể giải quyết đồng hồ trôi cho Máy ảo của mình?
- 18. Làm thế nào tôi có thể buộc các lớp kế thừa để thực hiện một phương thức tĩnh trong C#?
- 19. Làm cách nào tôi có thể giải quyết "lỗi LNK2019: biểu tượng bên ngoài chưa được giải quyết"?
- 20. Làm thế nào tôi có thể giải quyết một hiệp hội đa hình ba chiều?
- 21. Làm cách nào tôi có thể truy xuất tệp nguồn của một phương thức được biên dịch?
- 22. Làm thế nào tôi có thể nói với Emacs chi nhánh git của tôi đã thay đổi?
- 23. Pydev nói rằng lỗi "Nhập chưa được giải quyết"
- 24. Làm thế nào để khẳng định rằng C++ 11 nên được sử dụng để biên dịch chương trình của tôi?
- 25. Làm thế nào để giải quyết khó khăn của tôi làm cho các thuật toán?
- 26. Trong cmake, làm thế nào tôi có thể kiểm tra nếu trình biên dịch là Clang?
- 27. Làm thế nào tôi có thể gọi một phương thức tĩnh trên một lớp biến?
- 28. Tôi có thể truy cập phương thức lớp và phương thức thể hiện bằng ruby như thế nào?
- 29. Làm thế nào để tôi nhận được các autotools để biên dịch với trình biên dịch Intel?
- 30. Tôi không thể biên dịch giải pháp do "Lỗi LNK2028: mã thông báo chưa được giải quyết ..."
Một giao thức không chính thức giải quyết vấn đề của tôi một cách hoàn hảo. –