1.3 使用Xcode开发环境
经过本书1.2节内容的讲解之后,接下来开始讲解使用Xcode开发环境的基本知识,为读者步入后面Objective-C知识的学习打下坚实的基础。
1.3.1 改变公司名称
通过xcode编写代码,代码的头部会出现类似于图1-12所示的内容。
图1-12 头部内容
在此可以将这部分内容改为公司的名称或者项目的名称。
1.3.2 通过搜索框缩小文件范围
当项目开发到一段时间后,源代码文件会越来越多。再从Groups & Files的界面去点选,效率会比较差。可以借助Xcode的浏览器窗口,如图1-13所示。
图1-13 Xcode的浏览器窗口
在图1-13的搜索框中可以输入关键字,这样浏览器窗口中只显示带有关键字的文件,如图1-14所示。
图1-14 输入关键字
1.3.3 格式化代码
例如,在图1-15所示的界面中,有很多行都顶格了,此时需要进行格式化处理。
图1-15 多行顶格
选中需要格式化的代码,在上下文菜单中进行查找,这是比较常规的办法。如图1-16所示。
图1-16 在上下文菜单中进行查找
Xcode没有提供快捷键,当然可以自己设置,此时可以用快捷键实现,例如:ctrl+a(全选文字),ctrl+x(剪切文字),ctrl+v(粘贴文字)。Xcode会对粘贴的文字进行格式化。
1.3.4 代码缩进和自动完成
有时代码需要缩进,有时又要做相反的操作。单行缩进和其他编辑器类似,只需使用【tab】键即可。如果选中多行则需要使用快捷键,其中【command+]】表示缩进,【command+[】表示反向缩进。
使用IDE工具的一大好处是能够帮助我们自动完成冗长的类型名称。Xcode提供了这一方面的功能。比如下面的输出日志:
NSLog(@"book author:%@",book.author);
如果都是自己输入会很麻烦的,可以先输入ns,然后使用快捷键【ctrl+.】,会自动出现如下代码:
NSLog(NSString*format)
填写参数即可。快捷键【ctrl+.】的功能是自动给出第一个匹配ns关键字的函数或类型,而NSLog是第一个。如果继续使用【ctrl+.】,则会出现NSString的形式。以此类推,会显示所有ns开头的类型或函数,并循环往复。或者也可以使用快捷键【ctrl+,】,比如还是ns,那么会显示全部ns开头的类型、函数、常量等的列表。可以在这里选择。其实,Xcode也可以在输入代码的过程中自动给出建议。比如要输入NSString。当输入NSStr时:
NSString
此时后面的ing会自动出现,如果和预想的一样,只需直接按【tab】键确认即可。也许你想输入的是NSStream,那么可以继续输入。另外也可按【esc】键,这时就会出现以下结果列表以供选择。如图1-17所示。
图1-17 出现结果列表
如果是正在输入方法,那么会自动完成,如图1-18所示。
图1-18 自动完成的结果
可以使用【tab】键确认方法中的内容,或者通过快捷键【ctrl+/】在方法中的参数来回切换。
1.3.5 文件内查找和替代
在编辑代码的过程中经常会做查找和替代的操作,如果只是查找则直接按快捷键【command+f】即可,在代码的右上角会出现图1-19所示的对话框。只需输入关键字,不论大小写,代码中所有命中的文字都会高亮显示。
图1-19 查找界面
也可以实现更复杂的查找,比如是否大小写敏感,是否使用正则表达式等。设置界面如图1-20所示。
图1-20 复杂查找设置
通过图1-21中的“Find & Replace”可以切换到替代界面。
图1-21 “Find & Replace”替换
图1-22所示的界面将查找设置为大小写敏感,然后替代为myBook。
图1-22 替代为myBook
另外,也可以单击按钮是否全部替代,还是查找一个替代一个等。如果需要在整个项目内查找和替代,则依次选择“Find”→“Find in Project…”命令,如图1-23所示。
图1-23 “Find”→“Find in Project…”命令
还是以查找关键字book为例,实现界面如图1-24所示。
图1-24 在整个项目内查找“book”关键字
替代操作的过程也与之类似,在此不再赘述。
1.3.6 快速定位到代码行
如果想定位光标到选中文件的行上,可以使用快捷键【Command+L】来实现,也可以依次选择“Navigate”→“Jump to Line…”命令实现。如图1-25所示。
图1-25 “Navigate”→“Jump to Line…”命令
在使用菜单或者快捷键时会出现下面的对话框,输入行号和按回车键后就会来到该文件的指定行。如图1-26所示。
图1-26 输入行号
1.3.7 快速打开文件
有时需要快速打开头文件,如图1-27所示的界面。要想知道这里的文件Cocoa.h到底是什么内容,可以通过单击选中文件Cocoa.h来实现。
依次选择“File”→“Open Quickly…”命令,如图1-28所示。
图1-27 一个头文件
图1-28 “Open Quickly…”命令
弹出如图1-29所示的对话框。
图1-29 “Open Quickly…”对话框
双击文件Cocoa.h的条目即可看到图1-30所示的界面。
图1-30 文件Cocoa.h的内容
1.3.8 使用书签
使用Eclipse的用户会经常用到TODO标签,比如正在编写代码时需要做其他事情,或者提醒自己以后再实现的功能时,可以写一个TODO注释,这样在Eclipse的视图中可以找到,方便以后查找这个代码并进行修改。其实Xcode也有类似的功能,比如存在一段图1-31所示的代码。
这段代码的方法printInfomation是空的,暂时不需要实具体现。但是需要要记下来,便于以后查找并进行补充。可以让光标在方法内部,然后右击,选择“Add to Bookmarks”命令。如图1-32所示。
图1-31 一段代码
图1-32 选择“Add to Bookmarks”命令
此时会弹出以下对话框,可以在里面填写标签的内容,如图1-33所示。
这样即可在项目的书签节点中找到这个条目,如图1-34所示。此时单击该条目,可以返回刚才添加书签时光标的位置。
图1-33 填写标签的内容
图1-34 在项目的书签节点找到这个条目
1.3.9 自定义导航条
在代码窗口上有一个工具条,可以提供很多方便的导航功能。如图1-35所示。
图1-35 导航条
也可以用来实现TODO的需求。这里有两种自定义导航条的写法。下面是标准写法。
#pragma mark
下面是Xcode兼容的格式。
// TODO:xxx
// FIXME:xxx
完整的代码如图1-36所示。
图1-36 完整的代码
此时会产生图1-37所示的导航条效果。
1.3.10 使用Xcode帮助
如果想快速地查看官方API文档,可以在源代码中按【Option】键并双击该类型(函数、变量等),图1-38所示的是SKTextureFilteringMode的API文档对话框。
图1-37 产生的导航条效果
图1-38 SKTextureFilteringMode的API文档对话框
如果单击图1-38中标识的按钮,会弹出完整文档的窗口。如图1-39所示。
图1-39 完整文档的窗口
1.3.11 调试代码
最简单的调试方法是通过NSLog打印出程序运行中的结果,然后根据这些结果判断程序运行的流程和结果值是否符合预期。对于简单的询问项目,通常使用这种方式即可。但是,如果开发的是商业项目,需要借助Xcode提供的专门调试工具。所有的编程工具的调试思路都是相同的。首先要在代码中设置断点,此时可以想象一下,程序的执行是顺序的,可能怀疑某个地方的代码出了问题(引发bug),可以在这段代码开始的地方,比如在方法的第一行,或者循环的开始部分,设置一个断点。程序在调试时会在运行到断点时中止,接下来可以一行一行地执行代码,判断执行顺序是否是自己预期的,或者变量的值是否和自己想的保持一致。
设置断点的方法非常简单,比如要对红框表示的行设置断点,可以单击该行左侧红圈位置。如图1-40所示。
图1-40 单击该行左侧红圈位置
单击后会出现断点标志,如图1-41所示。
图1-41 出现断点标志
然后运行代码,比如使用“Command+Enter”命令,这时将运行代码,并且停止在断点处。如图1-42所示。
图1-42 停止在断点处
可以通过“Shift+Command+Y”命令调出调试对话框,如图1-43所示。
图1-43 调试对话框
这和其他语言IDE工具的界面大同小异,因为都具有类似的功能。下面是主要命令的具体说明:
continue:继续执行程序。
step over,step into,step out:用于单步调试,分别如下:
step over:将执行当前方法内的下一个语句。
step into:如果当前语句是方法调用,将单步执行当前语句调用方法内部的第一行。
step out:将跳出当前语句所在方法,到方法外的第一行。
通过调试工具,可以对应用做全面和细致的调试。