在NSDictionary中存放Selector

在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:@"…"];

本文出自 “林家男孩” 博客,请务必保留此出处http://bj007.blog.51cto.com/1701577/544203

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值