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++类型,就不必更改项目中的其他文件。不值得为解决这个问题添加额外的依赖。