GwynneRaskind

Latest

  • DevJuice: Better Objective-C associated objects

    by 
    Erica Sadun
    Erica Sadun
    04.10.2013

    iOS/OS X internals guru Gwynne Raskind tipped me off to a much better way of creating associated object keys. Until now, I've been doing this: static const char nametag_key; return objc_getAssociatedObject(self, (void *) &nametag_key); Turns out there's a much easier and better way. That's because Apple's selector implementation uses a fixed address. That means you can declare a property, for example: @property (nonatomic) NSString *nametag; and then use that property's selector as the key: return objc_getAssociatedObject(self, @selector(nametag)); It's way cleaner, requires no extra static variables, and according to Gwynne, "It's absolutely safe and rather cutely self-documenting in current runtimes -- and for the foreseeable near future, no question." Could this eventually break? Gwynne tells me that Apple would probably have to implement a completely new ABI for that to happen.