Take the 2-minute tour ×

I am trying to store callbacks in a dictionary.

  • I can't use blocks as the iPhone doesn't support this (unless you use plblocks).
  • I tried using functions, but apparently NSMutableDictionary doesn't allow these pointers (wants an id)
  • I tried using class methods, but I couldn't find a way to obtain a pointer to these
  • I could try using functions with the c++ stl hashmap (if it is supported in Objective C++), but apparently this can slow compilation times.
  • I could try storing both a class and a selector, but that seems rather messy.

What would be the best way to do this?

share|improve this question
add comment

4 Answers

up vote 4 down vote accepted

If you know what you are doing with pointers, you can wrap them up with NSValue. You can then put NSValue in a dictionary.

To insert:

[myDict setObject:[NSValue valueWithPointer:functionName] forKey:myKey];

For retrieval:

NSValue* funcVal=(NSValue*) [myDict objectForKey:myKey];
returnType* (*func)()=[funcVal pointerValue];
share|improve this answer
add comment

You can put it in an NSInvocation.

An NSInvocation is an Objective-C message rendered static, that is, it is an action turned into an object. NSInvocation objects are used to store and forward messages between objects and between applications, primarily by NSTimer objects and the distributed objects system.

share|improve this answer
add comment

If it's your own project, why not use blocks since you can?

share|improve this answer
It is not worth adding an extra dependency just for solving this problem. –  Casebash Jan 20 '10 at 22:13
add comment

It is possible to make a single file compile using C++ if you change the extension to .mm. You don't have to change the other files in your project as long as they don't have to handle any C++ types.

share|improve this answer
add comment

Your Answer


