2014-04-24 43 views
1

我寫簡單的代碼在Objective C,練習selector這是工作的罰款XCode在編譯時如何知道函數的名稱?

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"A",@"B", nil]; 
NSLog(@"Before adding %@",array); 

SEL message = @selector(addObject:); //I will change this line 

if([array respondsToSelector:message]) 
{ 
    [array performSelector:message withObject:@"C"]; 
} 

NSLog(@"After adding %@",array); 

但只要我改變選擇線,

SEL message = @selector(addobject:);// Just changed name of selector 

的XCode開始給予警告:

未聲明的選擇器'addobject:'

現在,問題是XCode在編譯時如何知道方法的名稱是否正確。是否總是有內部選擇器生成的列表,用於我創建的任何對象?在這種情況下,對於NSMutableArray

回答

2

所有Xcode都知道,在系統代碼或程序中沒有聲明名爲addobject的選擇器的類。你可以通過創建一個聲明addobject方法的自定義類來證明這一點,並且警告應該消失,但是當然程序將會崩潰,並顯示unrecognized selector sent to object錯誤消息。

+0

這就是我的問題,所有的時間XCode跟蹤所有的消息? –

+0

是的,Xcode有一個預編譯的頭文件,其中包含系統類的所有方法名稱,它跟蹤程序中定義的所有方法名稱。 – user3386109

+0

感謝您的快速響應。等待SO讓我接受你的答案。 –

相關問題