Associated Objects 小记

在一个 viewController 的生命周期内,只执行一次某段代码,怎么做? 第一种方法是最常见也是最简单的方法,加标记位。 还有没有更优雅的办法呢?面向 Google 编程,得到这个答案: void (^excuteOnce)() = ^{ if (objc_getAssociatedObject(self, _cmd)) { return; } objc_setAssociatedObject(self, _cmd, @"Launched", OBJC_ASSOCIATION_RETAIN); // some code }; excuteOnce(); 什么是 Associated Objects ? OC 有一个最大的弊端就是,我们可以通过 Category 给一个现有的类添加属性,但不能添加实例变量。不过还好有 runtime,我们可以通过 Associated Objects 达到这一目的。 通过查看 <objc/runtime.…