有没有一种方法可以在不将选择器存储为NSString
的情况下将其存储在NSDictionary
中
发布于 2010-05-13 04:45:23
SEL
只是一个指针,您可以将其存储在NSValue
中
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
[NSValue valueWithPointer:@selector(foo)], @"foo",
nil];
要取回选择器,您可以使用:
SEL aSel = [[dict objectForKey:@"foo"] pointerValue];
发布于 2012-02-13 18:34:15
格奥尔格的解决方案的另一种选择是在将选择器存储到NSDictionary之前将其转换为NSString:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
NSStringFromSelector(@selector(foo)), @"foo",
nil];
SEL selector = NSSelectorFromString([dict objectForKey:@"foo"]);
尽管这种技术使用了更多的内存,但它使您能够通过像JSONKit这样的库将整个NSDictionary序列化为字符串。
发布于 2010-05-13 04:49:53
NSDictionary
实际上只是一个保留和释放所有键和值的CFDictionary
。如果直接创建CFDictionary
,则可以将其设置为不保留和释放值。您可以将CFDictionaryRef
类型转换为NSDictionary *
,反之亦然。
https://stackoverflow.com/questions/2822602
复制相似问题