Câu trả lời:
Ngoài ra còn có bộ chọn tin nhắn tĩnh instanceRespondToSelector: (SEL) Bạn sẽ gọi nó như thế này:
[MyClass instancesRespondToSelector:@selector(someMethod:withParams:)]
hoặc như thế này:
[[myObject class] instancesRespondToSelector:@selector(someMethod:withParams:)]
Điều này có thể hữu ích nếu bạn muốn gọi một hàm tạo hoặc một hàm tạo khác tùy thuộc vào điều này (ý tôi là, trước khi có chính thể hiện).
Sử dụng respondsToSelector:
. Từ tài liệu :
responseToSelector:
Trả về một giá trị Boolean cho biết liệu người nhận có triển khai hay kế thừa một phương thức có thể phản hồi một thông báo được chỉ định hay không.
- (BOOL)respondsToSelector:(SEL)aSelector
Tham số
aSelector - Một bộ chọn xác định một tin nhắn.Trả về Giá trị
YES
nếu người nhận triển khai hoặc kế thừa một phương thức có thể phản hồi với aSelector , ngược lạiNO
.
Bạn đang tìm kiếm responseToSelector: -
if ([foo respondsToSelector: @selector(bar)] {
[foo bar];
}
Như Donal đã nói ở trên cho bạn biết rằng foo chắc chắn có thể xử lý việc nhận bộ chọn thanh. Tuy nhiên, nếu một proxy của foo chuyển tiếp thanh tới một số đối tượng bên dưới sẽ nhận được thông báo trên thanh, thì responseToSelector: sẽ cho bạn biết KHÔNG, mặc dù thông báo sẽ được chuyển tiếp đến một đối tượng phản hồi với thanh.
Việc kiểm tra các bộ chọn với responseToSelector thường chỉ dành cho các phương thức ủy quyền. Bạn không nên sử dụng forwardInvocation hoặc proxy cho các phương thức ủy quyền. Nếu bạn cần sử dụng responseToSelector trong các tình huống khác, bạn có thể muốn đảm bảo rằng không có cách nào thích hợp hơn để thiết kế chương trình của bạn.
- forwardInvocation:
).