2011-08-04 25 views

Trả lời

5

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

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

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