Mục tiêu-c có cung cấp cách chặn các cuộc gọi đến phương thức lớp không tồn tại không?Mục tiêu C và các phương pháp ma thuật trong lớp
Trả lời
Vâng, bạn có thể với resolveClassMethod: Phương pháp lớp (được xác định trên NSObject):
Đây cũng là một cái gì đó để xem ra cho (bối rối tôi lần đầu tiên): http://iphonedevelopment.blogspot.com/2008/08/dynamically-adding-class-objects.html
Phương pháp forwardInvocation
là những gì bạn sẽ muốn sử dụng. Nó được gọi tự động khi một bộ chọn không tồn tại được gọi trên một đối tượng. Hành vi mặc định của phương thức này là gọi doesNotRecognizeSelector:
(đó là những gì xuất ra thông tin gỡ lỗi cho bảng điều khiển của bạn), nhưng bạn có thể ghi đè lên nó làm bất cứ điều gì bạn muốn. Một phương pháp tiếp cận được khuyến cáo bởi Apple là có phương pháp này chuyển tiếp lời gọi phương thức đến một đối tượng khác.
- (void)forwardInvocation:(NSInvocation *)anInvocation
Lưu ý rằng forwardInvocation
là một hoạt động khá tốn kém. Một đối tượng NSInvocation cần được tạo bởi khung công tác và (tùy chọn) được sử dụng để gọi một bộ chọn trên một cá thể khác. Nếu bạn đang tìm phương pháp phát hiện nhanh hơn (tương đối) không tồn tại thì bạn có thể chọn triển khai forwardingTargetForSelector
thay thế.
- (id)forwardingTargetForSelector:(SEL)aSelector
Bạn nên Apple's documentation cho làm thế nào để ghi đè các phương pháp này có hiệu quả, có một số của Gotcha để xem ra cho, đặc biệt là khi trọng phương pháp forwardInvocation
trên cùng một đối tượng mà sẽ có các selectors thiếu.
- 1. Phương pháp PHPStorm và ma thuật
- 2. Phương pháp ma thuật Javascript
- 3. Phương pháp gọi ma thuật trong Java
- 4. Phương pháp và phương pháp lớp học có cùng tên trong Mục tiêu-C
- 5. Mục tiêu-C - Phương pháp ghi đè trong phân lớp
- 6. Sử dụng PDO :: FETCH_CLASS với các phương pháp ma thuật
- 7. Ma trận trong Mục tiêu-C
- 8. Phương pháp tiện ích trong mục tiêu-c
- 9. Ai sẽ gọi phương pháp chính trong mục tiêu c
- 10. PHP - Zend nói tránh phương pháp ma thuật?
- 11. Thừa kế lớp C mục tiêu với các phương pháp nhà máy
- 12. "Phương pháp mở rộng" trong Mục tiêu-C
- 13. Python tương đương với PHP __call() phương pháp ma thuật?
- 14. Làm thế nào để gọi một Phương pháp Mục tiêu-C từ Phương pháp C?
- 15. Phương pháp gọi C mục tiêu động với một chuỗi
- 16. Sự khác biệt giữa các lớp C# một phần và các mục tiêu C?
- 17. Mục tiêu-C - Mẫu phương thức mẫu?
- 18. Phương pháp không tĩnh yêu cầu mục tiêu C#
- 19. Kiểm tra đơn vị phương pháp riêng - mục tiêu C
- 20. phương pháp C Mục tiêu đặt tên ước
- 21. Mục tiêu-C phát hiện nếu lớp ghi đè phương pháp kế thừa
- 22. Điều chỉnh một phương pháp hệ thống thông qua các loại trong Mục tiêu-C?
- 23. Cách viết các phương thức ma thuật (_call và _callStatic) cho các IDE
- 24. Phương pháp trong C++
- 25. Số ma thuật trong mảng? - C++
- 26. Các chức năng/phương pháp lôgarit nào có sẵn trong mục tiêu-c/cacao-touch?
- 27. Phương pháp ma thuật Php __get và __set - tại sao chúng ta cần những phương pháp này ở đây?
- 28. C++ mẫu ma thuật đen
- 29. Mục tiêu-C, biến thành viên và biến lớp
- 30. Phương thức gọi trên lớp con từ phương thức lớp cha (Mục tiêu-c 2.0)
Cơ chế chuyển tiếp phương thức lớp yêu cầu các phương thức lớp, không phải phương thức thể hiện. '+ (void) forwardingTargetForSelector: (SEL) sel;' '+ (void) forwardInvocation: (NSInvocation *) anInvocation;' Chức năng sau đó sử dụng một chức năng hỗ trợ: '+ (NSMethodSignature *) methodSignatureForSelector: (SEL) sel; ' – dmitri