Objective c 在字典中存储回调(iPhone的目标C)

Objective c 在字典中存储回调(iPhone的目标C),objective-c,Objective C,我正在尝试将回调存储在字典中 我不能使用blocks,因为iPhone不支持它(除非您使用plblocks) 我尝试过使用函数,但NSMutableDictionary显然不允许使用这些指针(需要id) 我尝试使用类方法,但找不到获取指向这些方法的指针的方法 Li >我可以尝试使用C++ STL HASMAP函数(如果它在ObjultC++中支持),但显然这会减慢编译时间。 我可以尝试同时存储一个类和一个选择器,但这看起来相当混乱 这样做的最佳方式是什么?如果您知道如何使用指针,可以使用N

我正在尝试将回调存储在字典中

  • 我不能使用blocks,因为iPhone不支持它(除非您使用plblocks)
  • 我尝试过使用函数,但NSMutableDictionary显然不允许使用这些指针(需要id)
  • 我尝试使用类方法,但找不到获取指向这些方法的指针的方法
  • <> Li >我可以尝试使用C++ STL HASMAP函数(如果它在ObjultC++中支持),但显然这会减慢编译时间。
  • 我可以尝试同时存储一个类和一个选择器,但这看起来相当混乱

这样做的最佳方式是什么?

如果您知道如何使用指针,可以使用NSValue将其封装起来。然后可以将NSValue放入字典中

插入:

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

NSValue* funcVal=(NSValue*) [myDict objectForKey:myKey];
returnType* (*func)()=[funcVal pointerValue];
你可以把它放在一个盒子里

NSInvocation是一个客观的C 消息呈现为静态,即 是一个动作变成了一个对象。 NSInvocation对象用于存储 并在对象之间转发消息 以及应用程序之间,主要通过 NSTimer对象和分布式 对象系统


如果是你自己的项目,既然你可以使用块,为什么不使用块?

< p>如果你把扩展名改为.mm,可以用C++编译一个文件。只要不必处理任何C++类型,就不必更改项目中的其他文件。

不值得为解决这个问题添加额外的依赖。