2014新年伊始:近期读过的好文推荐

年过的也差不多了,有一段时间没写字了。今天写写最近看的一些文章,附带一点自己的看法和理解。

二进制的世界:原文

一篇编程基础知识的文章,讲解了C、OC中的各种位运算,引申到OC中的例子如十六进制颜色值通过位移转换到UIColor,还有动画中的UIViewAnimationOptions属性,另外这篇文章(Cocoa中的位与位运算)也可以看看。

Block 还是代理 (Blocks or Delegation) :原文 翻译

今天刚读到这篇文章,Block还是代理,也是我一直想问的一个问题。这篇文章适合多读几遍,会有不同层次深度的理解,文中从各方面比较 Block 和 Delegation ,通过窥探苹果的做法试图找到正确的道路,下面简单提炼一下要点:

  1. 大部分的代理协议都有一些消息。
  2. 一个对象只能有一个代理。
  3. 一些代理方法要有返回值。
  4. 过程 vs. 结果
  5. 速度(也许吧?)

在文中说到第四点的时候,有时候设计Block时,当一个方法有失败的情况下会有两个Block回调,作者认为不如使用一个Block回掉,然后在里面判断状态(如Error什么的),进行不同处理。看到这我也的确想不出为什么?哪点优于多一个Block。作者后面一个例子中看到[progressBar stopAnimating];的时候,我也恍然大悟,因为之前写过一些方法都是第一种多用一个Error Block,导致有些需要两个Block都要调用的代码会写两遍,这样说来确实有点鸡肋。但是看看AFNetWorking框架中几乎所有操作方法都有一个额外的Error Block,这究竟那种才是优良的设计呢?

Objective C中C99的使用 : 原文

原来一个小小的CGRect初始化还有这么多玄机。

NSArray enumeration performance examined 原文

NSArray枚举性能研究,比较了NSArray的4种枚举方式的性能,有详细的图表,文末也贴出了测试用的代码

  1. objectAtIndex: enumeration
  2. NSEnumerator
  3. NSFastEnumerator
  4. Block enumeration

Dev vs Dev: Convert Integer to Binary as NSString 原文

把一个整形转换为二进制位输出,这也是我以前在学校的时候遇见过一道笔试题,主要运用到了 & (位与) 和 >> (右移) 操作,文中介绍了好几种变种方法,有用C写的,也有Objective-C的,值得一看!

Tips for High Performance Collection Looping in Objective-C 原文 翻译-OSC

Objective-C 集合类型的循环再一篇深入评测,对比了NSArray、NSDictionary、NSSet的各种枚举、循环耗时。最后总结出 NSArray、NSDictionary、NSSet分别在哪些情况下适合使用哪种遍历方法。