2012-07-15 57 views
0

可能重複:
Are selectors in Objective-C just another way to send a message to an object?選擇器的需求是什麼?

我讀過蘋果的有關文件選擇,但我還是不明白,爲什麼有必要爲他們。

至於我能理解,選擇相當於函數指針。是對的嗎?

+1

的可能重複[是選擇在目標 - 2 C只是另一種方式將消息發送到一個對象(http://stackoverflow.com/questions/3543137/are-selectors-in-objective-c-just-另一種方式發送消息到對象)和[瞭解ObjC中的選擇器](http://stackoverflow.com/questions/11051528/issue-understanding-a-part-of-selectors-的目標-c)的 – 2012-07-15 21:04:31

回答

1

選擇器不是函數指針。

選擇器是唯一的地址方法的標識符(消息名稱)。他們需要使用messenger函數(objc_msgSend _ *())來快速查找方法名稱,因爲每次選擇器在內存中都有一個唯一的地址,所以不需要每次都進行相當昂貴的字符串比較,所以一個簡單的指針比較就足夠了。

3

選擇器被用來獲得一個對象的方法實現。

例如,幾乎每一個對象實現,即使它繼承其超類的實施description方法。函數指針只能指向description的一個特定實現(例如,它只能指向NSString的版本或NSNumber的版本,但不能同時指向兩者)。你不能把一個類的description實現的函數指針,並用它爲每一個類,但你可以使用description選擇,而且它並不重要對象,你作爲目標使用,正確的方法實現將總是被使用。