Block 调用检查

前言 如何确保一个传递给别人的 Block 被调用过,是一个一直困扰我的问题,因为 Block 作为 iOS 的一种回调机制,它可以像函数一样马上被调用,也可以像对象一样被持有、被传递、被释放,并在将来的某个时候被调用。有些时候我们传出去的 Block 必须被调用一次,否则会处于一种不确定的状态而导致程序无法继续,或者出错。例如,之前一篇文章《一种 App 内路由系统的设计》中的路由注册方式, »

安全的 keypath

KVO 和 KVC 是 Objective-C 语言非常强大的两个特性,从一开始的似懂非懂到慢慢了解它的底层实现,才感受到这门动态语言的魅力所在。 KVC 允许通过一个点分隔的字符串来设置一个对象的属性值,而 KVO 可以通过点分隔的字符串来监听对象属性值的改变。 @interface Foo : NSObject @property (nonatomic) NSString *name; @property (nonatomic) NSInteger age; @end @interface »

运行时环境变量

Xcode 中按 Shift Command , 可以快速编辑项目的 Scheme(或者从 Project -> Scheme -> Edit Scheme 选择),在 Arguments 下可以添加运行时的环境变量: 添加环境变量是调试利器,如调试调试僵尸对象(已经释放的对象引起的 Crash)时使用的 NSZombieEnabled 环境变量,以及调试 CGContext »