注意:
讀者看到@selector(…)語句的時候可能會覺得有些陌生,這在Objective-C中用來指定某個特定方法。關(guān)鍵在于,決不能忘記上述示例中updateTenTimesPerSecond后面的冒號!該冒號告訴Objective-C:“去找一個名為updateTenTimesPerSecond的方法,這個方法有且只有一個參數(shù)?!比绻泴懨疤枺幾g還是可以通過的,但是程序一運行就會發(fā)生崩潰。在Debugger Console窗口中,你會看到這樣的錯誤日志:“unrecognized selector sent to instance…”。
@selector(…)中的冒號數(shù)一定要與所指定方法的參數(shù)個數(shù)相同。假設(shè)有下述方法:
-(void) example:(ccTime)delta sender:(id)sender flag:(bool)aBool
那么,對應(yīng)的@selector語句就應(yīng)該是:
@selector(example:sender:flag:)
不論是在調(diào)度消息時還是在其他情況下使用@selector(…),都需要注意一個很重要的問題:在默認情況下,如果方法名不存在,編譯器并不會報錯;但是,一旦程序運行時調(diào)用了指向不存在方法的aselector語句,應(yīng)用程序就會立即崩潰。由于這個調(diào)用是在cocos2d內(nèi)部完成的,因此很難找到問題所在。好在,你可以做一些設(shè)置來強制編譯器報錯。圖3-3顯示的是設(shè)置強制報錯的界面。本章的“Essentials”Xcode項目也已經(jīng)做了相同設(shè)置。