正文

基 礎(chǔ) 知 識(shí)(8)

iPhone & iPad Cocos2D游戲開發(fā)實(shí)戰(zhàn) 作者:(美)伊特海姆


  

注意:

讀者看到@selector(…)語(yǔ)句的時(shí)候可能會(huì)覺得有些陌生,這在Objective-C中用來(lái)指定某個(gè)特定方法。關(guān)鍵在于,決不能忘記上述示例中updateTenTimesPerSecond后面的冒號(hào)!該冒號(hào)告訴Objective-C:“去找一個(gè)名為updateTenTimesPerSecond的方法,這個(gè)方法有且只有一個(gè)參數(shù)。”如果忘記寫冒號(hào),編譯還是可以通過(guò)的,但是程序一運(yùn)行就會(huì)發(fā)生崩潰。在Debugger Console窗口中,你會(huì)看到這樣的錯(cuò)誤日志:“unrecognized selector sent to instance…”。

@selector(…)中的冒號(hào)數(shù)一定要與所指定方法的參數(shù)個(gè)數(shù)相同。假設(shè)有下述方法:

-(void) example:(ccTime)delta sender:(id)sender flag:(bool)aBool

那么,對(duì)應(yīng)的@selector語(yǔ)句就應(yīng)該是:

@selector(example:sender:flag:)

不論是在調(diào)度消息時(shí)還是在其他情況下使用@selector(…),都需要注意一個(gè)很重要的問(wèn)題:在默認(rèn)情況下,如果方法名不存在,編譯器并不會(huì)報(bào)錯(cuò);但是,一旦程序運(yùn)行時(shí)調(diào)用了指向不存在方法的aselector語(yǔ)句,應(yīng)用程序就會(huì)立即崩潰。由于這個(gè)調(diào)用是在cocos2d內(nèi)部完成的,因此很難找到問(wèn)題所在。好在,你可以做一些設(shè)置來(lái)強(qiáng)制編譯器報(bào)錯(cuò)。圖3-3顯示的是設(shè)置強(qiáng)制報(bào)錯(cuò)的界面。本章的“Essentials”Xcode項(xiàng)目也已經(jīng)做了相同設(shè)置。


上一章目錄下一章

Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)