iPhone How-to:如何在NSDictionary中存放Selector
2011-04-13 19:05
246 查看
在iPhone中,Selector类型的定义是:
typedef struct objc_selector *SEL;
可见它本质上是一种指针。而NSDictionary存储的对象应该源自NSObject的对象。直接将SEL类型的值存放到NSDictionary中显然不大可能。在这种情况下,通常有两种做法:一是存放字符串,然后通过NSSelectorFromString从字符串得到SEL。第二种做法就是需要对SEL进行“打包”后存放到NSDictionary,获取时就进行相应的“解包”操作就可以了。本文关注第二种实现,其中存放和获取的代码分别如下:
// 存放Selector
SEL inSelector = @selector(sayHello:);
NSValue *selectorAsValue = [NSValue valueWithBytes:&inSelector objCType:@encode(SEL)];
id dict = [NSMutableDictionary dictionaryWithCapacity:3];
[dict setObject:selectorAsValue forKey:@"action"];
// 获取Selector
SEL outSelector;
[(NSValue *)[dict objectForKey:@"action"] getValue:&outSelector];
[self performSelector:outSelector withObject:@"…"];
typedef struct objc_selector *SEL;
可见它本质上是一种指针。而NSDictionary存储的对象应该源自NSObject的对象。直接将SEL类型的值存放到NSDictionary中显然不大可能。在这种情况下,通常有两种做法:一是存放字符串,然后通过NSSelectorFromString从字符串得到SEL。第二种做法就是需要对SEL进行“打包”后存放到NSDictionary,获取时就进行相应的“解包”操作就可以了。本文关注第二种实现,其中存放和获取的代码分别如下:
// 存放Selector
SEL inSelector = @selector(sayHello:);
NSValue *selectorAsValue = [NSValue valueWithBytes:&inSelector objCType:@encode(SEL)];
id dict = [NSMutableDictionary dictionaryWithCapacity:3];
[dict setObject:selectorAsValue forKey:@"action"];
// 获取Selector
SEL outSelector;
[(NSValue *)[dict objectForKey:@"action"] getValue:&outSelector];
[self performSelector:outSelector withObject:@"…"];
相关文章推荐
- [How to] 如何开始iphone的程序开发.
- iPhone How-to:如何更改UISwitch的提示文本
- iPhone How-to:如何递归dump UIView
- iPhone How-to:如何发送邮件
- iPhone How-to:如何dump所有类
- iPhone开发:如何阻止文件被iTunes和iCloud同步 How do I prevent files from being backed up to iCloud and iTunes?
- iPhone How-to:NSData转成NSDictionary
- iPhone How-to:多参数selector
- iPhone How-to:如何移除发布版本中的NSLog输出
- iPhone How-to:如何更改UISwitch的提示文本
- iPhone How-to:如何清除控件的Target-Action
- iPhone How-to:如何更改UISwitch的提示文本
- 在iPhone应用中如何使用随机数(How to Use Random Numbers in Your iPhone App)
- iPhone How-to:如何调整UIView的Z-Order
- [HOW TO]如何在iPhone应用程序中发送邮件
- iPhone How-to:如何调整UIView的Z-Order
- iPhone How-to:如何更改UISwitch的提示文本 推荐
- iPhone How-to:如何更改UISwitch的提示文本
- How to know windows last boot time? -如何知道Windows系统上次启动时间?
- How to get the size of file in C++ - 在C++中如何获取文件的大小