谈Objective-C中的property

property大概是objc中唯一的元编程机制,用来快速地生成类的数据成员的get和set方法。本文谈谈我对property的一些使用心得。

1)retain,copy和assign:

retain的作用在于生成set方法时该数据成员(一定是objc对象)的引用计数+1,通常用于除NSString类型以外的objc对象。如

一个常见的例外是delegate的set方法通常设为assign,这是为了避免循环引用造成的引用计数无法归0,然后内存泄漏——考虑一个view的delegate为该view所在controller的情况。

NSString类的对象的set方法设为copy,字符串对象需要深拷贝。 阅读全文 >>

iOS 开发中使用正则表达式-暨 RegexKitLite 库的用法

在 iOS 开发中要用正则表达式的话,至少有三种选择:

1. 系统自带的  NSString 和 NSMutableString 相关的方法
2. RegexKit Framework - http://regexkit.sourceforge.net
3. RegexKitLite - http://regexkit.sourceforge.net/RegexKitLite/

NSString 和 NSMutableString 里像

带有 NSStringCompareOptions 参数的方法就可以支持正则表达式,只要对于 NSStringCompareOptions 参数取值中含有 NSRegularExpressionSearch 这个 Mask 值即可。

RegexKit Framework 用的是 PCRE(Perl Compatible Regular Expressions) 库,可能是我们熟悉正则表达式语法,但需要引入 PCRE 静态库。

RegexKitLite,看链接它与 RegexKit Framework 出自一家,但它用的是 Mac 自带的 ICU(International Components for Unicode) 库,所以语法上与 RegexKit Framework 是不一样的,且引入它也较简单。 阅读全文 >>

在FCKEditor中使用插件UGeSHi-GeSHi实现代码高亮显示

本人安装了一个个人知识库管理系统 Knowledgeroot,选定了其中所见即所得编辑器比较好用的是 FckEditor,又再需要给它配上一款代码高亮的插件,于是找来了 UGeSHi-GeSHi。下面是从网络上摘来的在 FckEditor 中如何安装 UGeSHi-GeSHi 插件。

什 么是UGeSHi?UGeSHi是一个连接器,它把FCKEditor与GeSHi(采用PHP编程语言写的代码高亮插件,目前它已能高亮100多种程序 语言)紧密的结合在一起,您可以称为它为FCK插件,也可以称它为连接器(因为代码高亮的核心文件不是本人编写,本人只编写了其与FCKEditor整合 的过程)。

UGeSHi的功能:高亮程序代码,使程序代码美观且易读。

为什么采用GeSHi作为核心文件?原因很简单,因为GeSHi高亮足够完美,而且支持高亮的程序语言也很完善。

UGeSHi能高亮多少种程序语言?粗略的说可以高亮100多种,具体细节看下表: 阅读全文 >>

UIView 中的控件事件穿透 Passthrough 的实现

我们在有多个 UIView 层叠时,比如一个按钮被一个 UIView 遮盖时,想要在点击最上层的 UIView 时能触发按钮的相应事件,我们该如何实现呢,初步可以想到几种办法:

1. 把按钮上层的所有 UIView 的 userInteractionEnabled 属性设置为 NO,要是 UIView 有自己的交互事件该如何办呢?而且这个 userInteractionEnabled 不能动态设置,等到点击后决定设置它的 NO 是没用的

2. UIView 接受到点击事件后主动去触发下面按钮的点击,这时的关题有三,按钮没有点击过程中的交换效果、多层 UIView 时不切实际,逐层下传吗、还有就是其他双击、三击或别的手势如何处理

我也一直被前面两种方式纠缠着,同时也让 UIPopoverController 的 NSArray *passthroughViews 属性提醒着,因为对于 UIPopoverController,设置到它的 passthoughViews 属性中的控件事件可以完全从 UIDimmingView 下透出来。但苦于不可能看到 UIPopoverController 的源码,还是后面一而再的 Google 终于发现了 UIView 的方法:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;   // recursively calls -pointInside:withEvent:. point is in the receiver's coordinate system 阅读全文 >>

Windows 平台下的 TextMate:E-TextEditor (附下载)

在 Mac 平台下慢慢习惯了 TextMate 文本编辑器,功能很强,丰富的 Bundle 支持,于是想在 Windows 下找到一款类似的软件,那就是 E-TextEditor。E-TextEditor 可以支持许许多多的编程语言,关键它可以直接使用 TextMate 的 Bundle,这就能与 TextMate 达成一致了。

官方当前版本是 2.0.2,可在 http://www.e-texteditor.com/ 下载,可试用 30 天,可自己在网上找找,这里列出两方法:

1. 破解文件覆盖

只找到 2.0a 的 e.exe 文件,在 E-TextEditor.v2.0a.Cracked-EAT 同时有安装文件和 e.exe 文件下载

2. 修改注册表法

试用期 30 天记在 HKEY_CURRENT_USER\Software\e\CLSID2, 所以只要试用期快到了,把这个键删了就行,E-TextEditor 在试用期间好像也没有功能上的限制。 阅读全文 >>

走近 Ruby 的世界(六)

对于 Block,可以用 {} 或 do...end 来调用,如:

一般是多行时用 do...end,单行时用 {}

但对于 module、class、method 的声明不能像 C/Java 那样用 {},要用 ...end 来定义。 阅读全文 >>

走近 Ruby 的世界(五)

Ruby 单行注释用 #,没有 /* */ 这样的多行注释方式,但是可以用文档注释方式来进行多行注释:

=begin 注释描述
       中间的都是注释内容
=end

文档注释,像 Java 的 Javadoc, .net 的 ndoc,Ruby 也有 rdoc,Ruby 的 文档注释是也是在 method,class 和 module 定义之前进行注释的,注释的内容给 rdoc 生成 HTML 帮助文档,也给 ri 用的。也有一套语法,用 # = Headings 这样的语法,还支持些 HTML 代码。

Ruby 看到全大写的标识符,如 PI,还有像 LikeThis 或 LIKE_THIS 这样的标识符就认为是常量,对它们重新赋值就会告警:

warning: already initialized constant LikeThis

命名成 like_this 就是变量,这也是 Ruby 的约定优于配置,常量就是大写命名。 阅读全文 >>