处理把BOOL值存入NSMutableDictionary,从NSMutableDictionary中取出BOOL值

 

将一个BOOL值插入到NSMutableDictionary中,把BOOL值从NSMutableDictionary中取得出来的用法:

项目要讲BOOL类型的值插入到一个NSMutableDictionary。

首先将 BOOL 包装到 NSNumber中:

NSNumber *boolNumber = [NSNumber numberWithBool:YES]

取得BOOL值:

BOOL b = [boolNumber boolValue];

或者通过这种方式:

NSValue *boolValue = [NSValue value:pointerToBool withObjCType:@encode(BOOL*)];

BOOL *b = [boolValue pointerValue];

转载于:https://www.cnblogs.com/allanliu/p/4315655.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NSMutableDictionary和CFDictionary虽然都是字典类型,但是它们的底层实现不同。NSMutableDictionary是基于哈希表实现的,而CFDictionary是基于红黑树或哈希表实现的。因此,它们之间的转换需要进行数据拷贝,比较麻烦。 如果要将NSMutableDictionary转换为CFDictionary,可以使用CFDictionaryCreateMutable函数创建一个可变的CFDictionary,然后依次将NSMutableDictionary的键对添加到CFDictionary。 示例代码如下: ``` NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil]; CFMutableDictionaryRef cfDict = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { CFDictionarySetValue(cfDict, (__bridge const void *)(key), (__bridge const void *)(obj)); }]; // 使用cfDict CFRelease(cfDict); ``` 需要注意的是,CFDictionary键和类型必须是CFTypeRef类型的,因此需要进行桥接转换。在ARC环境下,需要使用__bridge关键字进行桥接转换。在非ARC环境下,需要手动进行内存管理。 如果要将CFDictionary转换为NSMutableDictionary,可以使用CFDictionaryGetCount和CFDictionaryGetValue函数依次遍历CFDictionary的键对,然后将它们添加到NSMutableDictionary。 示例代码如下: ``` CFDictionaryRef cfDict = CFDictionaryCreate(NULL, NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); NSMutableDictionary *dict = [NSMutableDictionary dictionary]; CFIndex count = CFDictionaryGetCount(cfDict); const void **keys = (const void **)malloc(sizeof(void *) * count); const void **values = (const void **)malloc(sizeof(void *) * count); CFDictionaryGetKeysAndValues(cfDict, keys, values); for (CFIndex i = 0; i < count; i++) { id key = (__bridge id)(keys[i]); id value = (__bridge id)(values[i]); [dict setObject:value forKey:key]; } free(keys); free(values); // 使用dict ``` 同样地,在ARC环境下需要使用__bridge关键字进行桥接转换。在非ARC环境下,需要手动进行内存管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值