views:

120

answers:

2

NSInvocation seems to be one of the worst designed functions in Cocoa, so I decided to check if anyone had written a recipe to make using it easier. I found a recipe on Matt Gallagher's blog. Now to be able to do this he used some quite hackish techniques.

  1. Would you recommend using this code or is this technique too likely to lead to a hard to debug error?
  2. If not, what would you recommend instead?
A: 

The simplest utility function would have the following interface

+ (id)retainedInvocationWithTarget:(id)target invocationOut:(NSInvocation
**)invocationOut args:NSDictionary;

This would have the disadvantage that nil cannot be passed in for the arguments. I think there should be a better solution

UPDATE: NSNull can be used in dictionaries instead of nil

Casebash
+2  A: 

I have used this NSInvocation approach in a few shipping iPhone products and Mac products. It definitely employs a few strange techniques but it's not a fragile hack by any means: it's rock solid and about as fast as NSInvocation creation is likely to be.

I did briefly have a retain count bug in the code (long since fixed) but it's no harder to debug retain counts here than anywhere else.

Of course, my opinion is completely biased.

Matt Gallagher
Its pretty cool actually have the blog author respond to the question, but I was actually looking for a second opinion =P
Casebash
After reading some of your other blog posts I've decided that I'll trust your opinion about it being rock solid
Casebash