I'll add: if the no macro / invocation version feels too unwieldy, then let's go with the macro approach but lose the respondsToSelector check. That way we're firmly relying on either the macro or the runtime check, but not both.