在NSDictionary中存放Selector

本文介绍在iOS开发中如何将SEL类型的数据存储到NSDictionary中,并提供了具体实现方式。通过使用NSValue对SEL类型进行打包和解包,使得存储和读取成为可能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值