But unfortunately you cannot follow the same pattern and add a third argument to setValue, expecting to be able to add another with – the code below doesn’t compile because there is no appropriate perform override available on NSObject – although the #selector expression itself would run correctly:

I assume this is mostly because such a construct would be rarely needed, so extending the library with more overrides would have just been too much overhead. Moreover, I understand that it is eventually possible to do it in a generic way by calling some lower level, Objective C library, functions. But I think it’s good to acknowledge this NSObject inheriting limitation (or should we call it inconsistence?) rather sooner than later.

Of course, if your selected function doesn’t have any argument, executing it with a selector would still work, just don’t pass any with argument to the perform call either. (Awkward conclusion: the approach works only with functions that have 0-2 arguments.)