作者存档: cosmo2097

Ruby学习(1) – Symbol(符号)总结

在Ruby的学习过程中应该不乏接触到Symbol,就是以冒号开头的变量名如 :tems_of_service,特别是在Rails中,更是大量使用Symbol。

这不乏让初学者感觉有些疑惑,疑惑的是Symbol有什么作用,什么时候使用Symbol才是正确的?以下根据最近学习的体会进行总结。

1、什么是Symbol

Jim Weirich:Symbol是有名字的对象

Austin Ziegler:An object that is a name

2、Symbol和字符串

Symbol和字符串的主要区别在于,内存的存储方式上。

符号 :a_symbol在多次使中引用的是同一个内存地址。

而字符串 “a_string”在多次使用中指向的是不同的内存地址,即每次都生成一个新的对象。

Symbol和字符串是可以相互转换的,一般来说使用Symbol的地方使用字符串来代替都是合法的。

可以通过以下方法进行转换:

:a_symbol.to_s #=>"a_symbol"

:a_symbol.id2name #=>"a_symbol"

"a_string".to_sym #=>:a_string

"a_string".intern # =>:a_string

3、Symbol的作用

第一是 节省内存的用量,提高性能

特别对于Rails如果不适用Symbol,某一个字符串可能会被使用很多次,在大访问量情况下节省的资源还是不可忽视的。

另外对于hash对象,如果使用Symbol也可以提高效率,因为使用字符串必须每次计算字符串的hash。

第二是 易读性

它使得语言的理解更加自然,如attr_accessor :a_name 我们很容易理解Ruby将生成一个以a_name为名字的访问器。

4、什么时候使用Symbol

引用Ruby黑客Jim Weirich的两句话:

如果对象的内容(字符创序列)总要,那么使用字符串。

如果对象的一致性重要,那么使用符号。

使用GH-Unit对iOS应用进行单元测试

单元测试的目的

  1. 保证代码的正确性
  2. 支持未来的代码重构

基础环境:

  • 使用苹果系统的电脑
  • XCode

GH-Unit是一个强大的单元测试框架,由Gabriel Handford开发,使用GH-Unit进行单元测试需要进行一些配置。

  1. 新建一个项目并添加一个测试目标(Target)
    我这里新建了一个“Window-based Application”,新建完成后先尝试“Build and Run”保证程序能正常启动,在Targets上右击选择“Add - New Target…”
    Add new target to project
    Target的名称可以命名为Tests或者类似的名字。
  2. 下载GH-Unit框架并添加必要的框架到项目
    下载地址:https://github.com/downloads/gabriel/gh-unit/GHUnit-0.4.28.zip
    解压缩后拖到XCode中,选择拷贝源代码到项目,并且目标选择为Tests
    Adding GHUnitIOS.framework
    打开Tests这个目标进行配置,设置目标依赖到第一个目标,添加CoreGraphics、Foundation、UIKit这几个框架。
  3. 检查“Framework Search Paths”
    检查“Framework Search Paths”这个参数是否指向GHUnitiOS.framework的父目录,一般默认已是正确的。
  4. 针对测试目标的“Other Linker Flags”添加“-Objc”,“-all_load”参数
  5. 修改Tests-Info.plist文件
    修改里面的“Main nib file base name”参数,将默认为“MainWindow”的值清空。
  6. 添加GHUnitIOSTestMain.m (http://github.com/gabriel/gh-unit/blob/master/Project-IPhone/GHUnitIOSTestMain.m)
    下载后拖到Other Sources中,选择拷贝到项目,并且选择目标为测试项目。
  7. (可选)创建Tests_Prefix.pch
    从原来的GHUnitExample_Prefix.pch拷贝一个文件并重命名为Tests_Prefix.pch,并使用XCode添加到项目中。
    修改Tests_Prefix.pch针对移动设备平台的话添加#import <GHUnitIOS/GHUnit.h>,添加后不用在创建的测试代码中引用库。
    最后修改Tests目标的配置文件,搜索GCC_Prefix修改为Tests_Prefix.pch。
  8. (可选)设置Makefile文件
  9. 创建测试
    为了便于源代码管理在项目目录下建立Tests,并导入到XCode中。
    在Tests组下添加一个测试类,用来测试配置是否正确,命名为“SetupTests”,从NSObject继承,不生成头文件。
  10. 运行测试
    选择Tests目标“Build and Run”,便可运行iPhone模拟器开始单元测试,若碰到问题请检查Tests-Info.plist配置是否正确。

参考资料:

http://gabriel.github.com/gh-unit/_installing.html

http://4arrowsmedia.com/2010/09/ghunit-setup/