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.

DevJuice: Better Objective-C associated objects originally appeared on TUAW – The Unofficial Apple Weblog on Wed, 10 Apr 2013 16:30:00 EST. Please see our terms for use of feeds.

Source | Permalink | Email this | Comments

You can follow on Twitter or join our Facebook page to keep yourself updated on all the latest from Apple and the Web.