Objc: 使用Xcode

转载:http://marshal.easymorse.com/tech/objc-%E4%BD%BF%E7%94%A8xcode

Xcode功能很多,以下介绍常用的功能,帮助ObjC开发人员提高编码和调试效率。

 

改变公司名称

通过xcode编写代码,代码的头部会有类似下面的内容:

image

应该将这个内容改为公司或者项目的名称。

在xcode 3.2.x之前,需要命令行设置变量。比如《objective-c基础教程》第七章中提到的方式。

之后,可以通过xcode的配置项操作了。操作步骤见下面图示:

image

然后:

image

这样,再创建文件,就有类似这样的效果了:

image

 

通过搜索框缩小文件范围

当项目开发到一段时间后,源代码文件会越来越多。再从Groups & Files的界面去点选,效率比较差。可以借助Xcode的浏览器窗口,即:

image

这里插一句,如果讨厌显示这个窗口,也可以通过快捷键:shift+command+e来切换是否显示。

还是继续说搜索框缩小文件范围。上图的搜索框,可以输入关键字,这样浏览器窗口里只显示带关键字的文件了。比如我只想看Book相关的类。

image

 

如何格式化代码

比如下面这段代码:

image

很多行都顶格了。需要进行格式化。可以选中需要格式化的代码,然后在上下文菜单中找:

image

这是比较规矩的办法。Xcode没有提供快捷键,当然自己可以设置。我又比较喜欢用快捷键。我的做法是:ctrl+a(全选文字),ctrl+x(剪切文字),ctrl+v(粘贴文字)。Xcode会对粘贴的文字格式化。

如何缩进代码

代码有的时候要缩进,有的时候又要做相反的操作。单行缩进和其他编辑器类似,tab键即可。如果选中多行呢?需要快捷键了。command+]表示缩进,command+[表示反向缩进。

 

代码的自动完成

使用IDE工具的一大好处是,工具能够帮助我们自动完成比如冗长的类型名称。Xcode提供了这方面的功能。

比如上面提到的输出日志:

NSLog(@"book author: %@",book.author);

如果都自己敲,很麻烦的。可以先敲ns,然后快捷键:ctrl+.,会自动出现:

image

然后填写参数就行了。ctrl+.快捷键的功能是,自动给出第一个匹配ns关键字的函数或类型。刚巧NSLog是第一个。如果继续ctrl+.,则会出现比如NSString。以此类推,会显示所有ns开头的类型或函数,循环往复。

或者,也可以用ctrl+,快捷键,比如还是ns,那么会显示全部ns开头的类型、函数、常量等的列表。可以在这里选择。

其实,Xcode也可以在你敲代码的过程中自动给出建议。比如咱们要敲NSString。当敲到NSStr的时候:

image

后面的ing就自动冒出来了。如果和你预想的一样,直接按tab键确认即可。也许你想输入的是NSStream,那么可以继续敲。另外,也可敲esc键,这时就会出现结果列表供选择了。

image

如果是正在输入方法,那么会自动完成比如下面的样子:

image

可以tab键确认方法中的内容,继续。或者可通过快捷键ctrl+/,在方法中的参数来回切换。

 

设置项目快照以及恢复到快照

其实在不用Xcode之前,我根本没有使用这种东西的需求。如果使用Eclipse,我习惯把代码提交到SVN上,并借助SVN的copy功能实现服务器端的快照。

Xcode上使用版本控制不是很方便。因此本地快照功能还是很值得使用的。

快照(snapshot),主要作用是,创建快照,好比,给你的项目拍了个照。然后你可以随便修改代码了,不必担心改乱了无法回退到之前的版本。如果确实改乱了,恢复到快照就可以了。恢复后,好像什么也没发生过。

image

可以通过make snapshot创建快照,或者快捷键ctrl+command+s。

想要恢复的时候:

image

然后选中做快照的版本:

image

make按钮可拍照当前项目,生成新的快照。可在comments中写下该快照的备注信息,便于以后恢复时辨别。delete按钮可删除不必要的快照。restore,将用选中的快照覆盖当前项目。show files可列出选中快照和当前项目文件的差异。

image

上图列出了有两个文件不同。再选中文件:

image

可以看到不同的地方给出了标注。

 

文件内查找和替代

代码中经常会做查找和替代的操作。如果只是查找。直接按command+f,代码的右上角会出现对话框:

image

在里面输入关键字,不论大小写,代码中所有命中的文字都高亮显示。

image

可以做更复杂的查找,比如是否大小写敏感,是否使用正则表达式等等。

可以切换到替代界面:

image

下面的界面,我是将查找设置为大小写敏感,然后替代为myBook:

image

可点击按钮是否全部替代,还是查找一个替代一个等。

 

项目内查找和替代

如果需要在整个项目内查找和替代:

image

还是找关键字book:

image

替代就不说了,如何操作一看便知。

 

作用域内编辑

比如:

image

我想把局部变量myBook改回成book。那么可以用到这个功能。首先要鼠标选中变量:

image

然后:

image

这时会看到: 
image

直接修改变量名,发现所有该变量名同时跟着改变了:

image

 

重构代码

重构(refactor)的概念这里不展开说了。读者可参考专门的论述。这里只举具体例子。比如修改类的名称,就是一种重构行为。Xcode提供了这方面的支持。

比如想把Book类改为GeneralBook类。首先要把光标放在类的头文件或者m文件的标注部位:

image

然后:

image

然后:

image

点击preview,可以预览改动的内容:

image

一般要保持snapshot的勾选,这样重构操作会生成快照,便于重构错误后的恢复。

点击apple,重构将执行。

 

快速定位到代码行

可以:

image

定位光标到选中文件的行上。一般会用快捷键,command+L。使用菜单或者快捷键,都会出现下面的对话框,输入行号,回车,就会到该文件的指定行。

image

 

快速打开文件

有时候,我们想快速打开头文件,比如:

image

这里的Cocoa.h到底是啥内容。可以鼠标选中Cocoa.h,如上图。然后:

image

这时会弹出对话框:

image

双击Cocoa.h条目就可以看到了:

image

另外,还有个更方便的操作,针对头文件的,就是按住command键鼠标双击类型(函数、变量等)名称。会在源代码窗口中显示该类型的头文件。

 

使用书签

以前在使用Eclipse,我经常用到TODO标签功能,比如正在编写代码的时候需要做其他事情,或者提醒自己以后再实现的功能,就写个TODO注释,这样,可以在Eclipse的视图中可以找到,方便以后找到这个代码并修改。

Xcode中是否有相应的功能呢?我现在觉得书签功能可以做类似的事情。

比如我写了个代码:

image

这个方法是空的,printInfomation。暂时不需要实现。但是要记下来,便于以后能找到并补充。那么让光标在方法内部。然后鼠标右键,Add to Bookmarks:

image

然后会弹出对话框,在里面填写标签的内容,比如:

image

这样,就可以在项目的书签节点找到这个条目了:

image

点击该条目,将回到刚才添加书签时光标的位置。

 

自定义导航条

在代码窗口上边,有一个工具条。提供了很多方便的导航功能。比如:

image

也可以用来实现上面TODO的需求。这里有两种自定义导航条的写法。其中:

#pragma mark

是标准写法。而:

// TODO: xxx

// FIXME: xxx

是Xcode兼容的格式。

完整的代码:

image

产生了这样的导航条效果:

image

 

使用Xcode帮助

如果想快速的查看官方API文档,可在源代码中按下option键并鼠标双击该类型(函数、变量等),比如,下面是NSString的API文档对话框:

image

如果点击上面标识的按钮,则会弹出完整文档的窗口:

image

 

调试代码

最朴素的调试方法,是通过NSLog打印出程序运行中的结果,然后根据这些结果判断程序运行的流程和结果值是否符合预期。对于简单的问题,使用这种方式也许就够用了。

但是,如果开发的是商业项目,它往往足够复杂,需要借助Xcode提供的专门调试工具。所有的编程工具的调试思路都是一样的。首先,你要在代码中设置断点。想象一下,程序的执行是顺序的,你可能怀疑某个地方的代码除了问题(引发bug),那么就在这段代码开始的地方,比如是个方法的第一行,或者循环的开始部分,设置一个断点。那么程序在调试时会在运行到断点时中止,接下来,你可以一行一行的执行代码,判断执行顺序是否是自己预期的,或者变量的值是否和自己想的一样。

设置断点很简单,比如想对红框表示的行设置断点,就单击该行左侧红圈位置:

image

单击后会出现断点标志:

image

然后,运行代码,比如用快捷键:command+enter。这时将运行代码,并停止在断点处:

image

可通过shift+command+y,调出调试对话框:

image

这和其他语言IDE工具的界面大同小异,因为都具有类似的功能。可通过:

  • continue,继续执行程序
  • step over, step into, step out,用于单步调试,分别表示:
    • step over:将执行当前方法内的下一个语句
    • step into:如果当前语句是方法调用,将单步执行当前语句调用方法内部第一行
    • step out:将跳出当前语句所在方法,到方法外的第一行

通过调试工具,可以对应用做全面和细致的调试。


posted on 2012-04-13 16:11  zengqh  阅读(2448)  评论(0编辑  收藏  举报