2009-09-25 31 views
12

Tôi đã nhận được một cuộc gọi như thế này [Phương pháp lớp] và cảnh báo cho biết rằng Lớp học có thể không trả lời thư "phương pháp".Làm cách nào để tắt cảnh báo trong xcode trên dòng cụ thể?

Thông báo "phương thức" không thực sự tồn tại nhưng mã của tôi sử dụng thông báo không rõ bắt (sử dụng forwardingTargetForSelector) để nó chạy tốt và được xây dựng để chạy theo cách đó. Làm cách nào để ẩn cảnh báo gây phiền nhiễu này?

Trả lời

16

Nếu bạn có ý định gửi một thông điệp có thể-chưa thực hiện đến một đối tượng, và bạn biết rằng bạn đang đi để bắt thất bại, bạn nên sử dụng gọi:

id myClone = [anObject performSelector:@selector(copy)]; 

Đó tuyên bố ý định của bạn trực tiếp hơn là bạn đang gọi một phương pháp có thể không tồn tại và bạn thật tuyệt với điều đó. Đây là một cách rõ ràng hơn để làm điều đó hơn là ngăn chặn cảnh báo hoặc giả mạo phương pháp.

+0

Cảm ơn. Tôi đoán nó sẽ kém hiệu quả hơn nếu tôi phải tạo bộ chọn tại mỗi cuộc gọi. Trừ khi tôi tuyên bố tất cả @selector của tôi và cho tất cả. – CodeFlakes

+1

Sự khác biệt hiệu suất sẽ hầu như không thể phát hiện được. Nếu bạn lo lắng, hãy lập hồ sơ. Không tối ưu hóa sớm. –

+2

'performSelector' chỉ hoạt động đối với các phương thức có kiểu đối số và kiểu trả về là tất cả các đối tượng; và chỉ có 0, 1 hoặc 2 đối số – user102008

3

Bạn có thể xác định danh mục khai báo phương thức đó. Có định nghĩa trong phạm vi tại thời điểm biên dịch sẽ tránh được cảnh báo. Một cái gì đó như

@interface MyClass (ShutUpTheCompilerMethods) 
- (void)method; 
@end 

... 

[MyClass method] //no warning here 
Các vấn đề liên quan