Or to put it another way: Cocoa is so very prone to have heroic solutions that require you unerringly to write heroic or at least merely mistake-less code.
Key-Value Observing. Cocoa Bindings. Retain/release. The thing they invented – ARC – to solve retain/release. Weak-referencing
selfin blocks or creating memory leaks. Autolayout. I consider myself a decent programmer, but I try to work out the complexity involved in completely implementing all-frills NSDocument loading and saving and I get winded.
There are operating system kernels with lower cyclomatic complexity.