完成了扫雷的编写,在这个过程中最痛苦的莫过于调试,对于IPhone程序的调试,xcode提供了很方便的调试,只需要在变量出鼠标不动
就可以观察变量的值和内存的地址。
其中我遇到的问题1:以前的编译记录没有清理掉,导致他会按照以前的编译。从而程序出错,这个错误一般的调试一步一步走你就会发
现有可能你注释的地方也被执行了。一旦发现和你预想的不对劲,马上对编译清理。
问题2:程序中我声明一个UIAlertView *alert,声明也是对了,但是一旦执行到[alert show],[alert release].时程序就会死掉并且
GDB提示EXC_BAD_ACCESS信息。这个问题很严重,最后上网查阅资料才得知EXC_BAD_ACCESS一般是由两种可能引起的。1是反复调用类似
[NSStringstringwithformat""]的语句,因为这个语句在最后会自动的将对象释放掉,所以一个对象被多次释放而你又在引用,这时GDB
就会收到这个所谓的EXC_BAD_ACCESS信号。第二种可能是可能你引用了已经被释放掉的对象,这时必须回到前面检查引用的对象是否还没被
初始化过或者已经被释放掉了。一旦遇到这个问题而你实在是找不到问题的所在时,你面临两种选择:1。重新写,重头到尾
严格控制好对象的初始化与释放。2。网上照的,调试EXC_BAD_ACCESS。设置NSZombiEnable这个环境变量方法。到Xcode中,左侧,excutable,点你的工程,绿色的那个,然后点上面panel中有一个info蓝色的叹号。到下面的对话框中。然后在Arguement,参数这个tab中,最下面,添加一个NSZombieEnable,设置为YES.这样编译器就会自动的对那个对象发送retain消息,从而该对象可以被引用了。最后问题解
决后,将NSZombieEnabled设置为无效即可。
问题3:组件没有设置输出口,如何通过某个特定的属性来获得特定的组件?javascript中可以通过getArrayById来获得你想要的组件,
而在IPhone中可以通过[self.view viewAtTag:m];来获得Tag值为m的组件,返回的对象是id类型。因此进行强制转换是有必要的。利用这
个语句就可以获得任何你进行了特定标记的组件了,然后你就可以进行各样的操作了。
问题4:如何更改某个组件的某些属性?设声明了一个UIbutton *button,开始调用点操作如button.titlelable 来重新设置按钮的标签值,这样的办法在这个按钮设置为UIoutlet时会有用,这时titlelable是button的内部参数,所以这个方法可以成功,但是如果没有设置为外部接口的时候,这个办法就行不通了。此时怎么办?这时就可以调用settitle方法。这个方法可以直接设置组件的标签,而不会出现是否为内部属性的问题了。
这几个问题就是我这次任务中遇到的几个认为很棘手的问题。