https://www.mikeash.com/pyblog/friday-qa-2009-03-20-objective-c-messaging.html