我花了相當一段時間試圖弄清楚class_respondsToSelector
和respondsToSelector
可以給出不同的結果。考慮下面的類:爲什麼class_respondsToSelector和respondsToSelector在發送到Class時行爲有所不同?
@interface Dummy : NSObject
- (void)test;
@end
@implementation Dummy
- (void)test {}
@end
我的情況是,我試圖確定如果一個類響應某一類方法。這片重新產生問題:
Class class = [Dummy class];
if (class_respondsToSelector(class, @selector(test)))
NSLog(@"class_respondsToSelector: YES");
else
NSLog(@"class_respondsToSelector: NO");
if ([class respondsToSelector:@selector(test)])
NSLog(@"respondsToSelector: YES");
else
NSLog(@"respondsToSelector: NO");
如果刪除了宣言和執行-test
,上述輸出是NO和NO如預期。但是,運行它,因爲它讀取上述(包括-test
),產生的輸出是下面的:
class_respondsToSelector:YES
respondsToSelector:否
文檔隻字未提是否respondsToSelector
作品只是它的表示接收器是否實現...,因此我無法確定這是否是正確的行爲。我錯過了什麼嗎?
更新
格雷厄姆·李提供此鏈接到一個great discussion on the problem。