在对钥匙串操作时这个函数

OSStatus SecItemCopyMatching(CFDictionaryRef query, CFTypeRef * __nullable CF_RETURNS_RETAINED result)

经常用到,表示查询Keychain里是否有符合条件的记录。第一个参数查询条件,第二个查询到结果的引用。

在非ARC模式下的基本使用方法如下

NSData *passwordData = NULL;

if (SecItemCopyMatching((CFDictionaryRef)returnDictionary, (CFTypeRef *)&passwordData) == noErr){

//ToDo

}else{

//ToDo

}

这里需要把 &passwordData 转换为 CFTypeRef * 类型。而在ARC模式下 这样写会报错

Cast of an indirect pointer to an Objective-C pointer to 'CFTypeRef *' (aka 'const void **') is disallowed with ARC

要解决这个问题需要对ARC模式下CF类型与OC类型之间的转换有所了解,最常用的有两个转换关键字,(__bridge type)expression 和 (__bridge_transfer Objective-C type)expression。

(__bridge type)expression //type 为id 或者 void* , expression为带有CF前缀类型的变量或者 void* 变量。如下所示

1、id obj = [[NSObject alloc] init];

void *p = (__bridge void *)obj;

id o = (__bridge id)p;

2、CGImageRef cgimage

self.layer.contents = (__bridge id)cgimage;

(__bridge_transfer Objective-C type)expression //type为OC类型 expression 可以是带有CF前缀的类型变量 。

解决上面遇到的类型转换错误可以这样做

CFTypeRef passwordDataRef;

SecItemCopyMatching((CFDictionaryRef)returnDictionary,  &passwordDataRef)

.........

NSData *passwordData = (__bridge_transfer NSData*)passwordDataRef;

这样转换之后再对passwordData 进行处理就不会报错了。

转载于:https://www.cnblogs.com/yuanxiaoping_21cn_com/p/6414946.html

ARC下带CF前缀的类型与OC类型转换相关推荐

  1. c语言arc函数带几个参数,ARC的使用简要总结

    .h文件中: 1,@property (strong,nonatomic)中属性的定义主要是类对外的接口,将retain,copy等变为strong. 2,私有变量 .m文件中的类扩展定义的私有属性变 ...

  2. python查看数据类型的方法_pycharm下查看python的变量类型和变量内容的方法

    pycharm下查看python的变量类型和变量内容的方法 用过Matlab的同学基本都知道,程序里面的变量内容可以很方便的查看到,但python确没这么方便,对于做数据处理的很不方便,其实不是没有这 ...

  3. Objective-C中,ARC下的 strong和weak指针原理解释

    Objective-C中,ARC下的 strong和weak指针原理解释 提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是& ...

  4. 能在ARC下跑的ASIHTTPRequest框架(以及升了5.0,用了ARC后N多开源框架不能用的解决方案) .

    能在ARC下跑的ASIHTTPRequest框架(以及升了5.0,用了ARC后N多开源框架不能用的解决方案) 2011-11-06 10:02 100人阅读 评论(0) 收藏 举报 能在ARC下跑的A ...

  5. C++下的OpenCV中Mat类型存储的图像格式

    在调用CV进行图像处理时,经常涉及图像格式转换,经常出现原始图像输入后CV_32F与ushort之间的数据差异导致程序报错,可使用std::cout << "dilated_ty ...

  6. IOS学习 ARC下__bridge

    总结于 IOS Tuturial 中 ARC两章,详细在dropbox pdf 文档. Toll-Free Bridging 当你在 Objective-C 和 Core Foundation 对象之 ...

  7. 能在ARC下跑的ASIHTTPRequest框架(以及升了5.0,用了ARC后N多开源框架不能用的解决方案)

    我在ios5sdk开发中,遇到asihttp因为arc的缘故,报了很多错,网上找了一上午,没找到一个具体解决办法.后来无意中发现,在target下面的build phases下有一个compile s ...

  8. 解决ARC下performselector-may-cause-a-leak-because-its-selector-is-unknown 警告

    在ARC下使用 [theTarget performSelector:theTarget withObject:Nil]; 会出现警告:performselector-may-cause-a-leak ...

  9. linux下带密码的scp,linux下带密码的scp

    from linux下带密码的scp (2014-03-10 12:35:46) 背景: 需要将一台机器的数据传输到另外一台机器上,两台机器没有信任关系,没有数据源一方没有ftp或者http,无法进行 ...

最新文章

  1. Codeforces 920D Tanks (看题解)
  2. GEF调色板中的多级树结构
  3. windows窗体(winform)中嵌入显示Excel工作表。
  4. 【算法竞赛学习】金融风控之贷款违约预测-数据分析
  5. 什么是Session?
  6. java编程思想学习(3):Java中的private、protected、public和default的区别
  7. 使用postman模拟百度通用文字识别
  8. java怎么知道上传文件是否成功_文件包含漏洞之——tomcat CVE-2020-1938漏洞复现
  9. 一个面试题关于变量的生命周期
  10. mfc 对话框应用程序 如何利用按钮弹出另一对话框
  11. python练手经典100例-Python 的练手项目有哪些值得推荐?
  12. 机器学习项目简历收集册-----机器学习(仅供参考)
  13. Fedora9下codeblocks安装无法编译的问题
  14. Jmeter_基本操作-取样器
  15. 转:PV、UV、访问次数、跳出率、转化率、平均访问时长
  16. lsyncd搭建和使用(含rsync配置)
  17. LED指示灯在常见网络设备故障诊断中的应用
  18. kindle如何设置不闪屏_kindle闪屏怎么解决
  19. 添加虚拟机镜像centso 8的步骤
  20. latex附录中放python代码_LaTeX之附录设置

热门文章

  1. pytorch下载mnist超时解决方案
  2. 【解决方案】requests.exceptions.SSLError: HTTPSConnectionPool
  3. Ubuntu 使用root 帐号开启 SSH 登录
  4. alpinestars与丹尼斯_骑行靴|丹尼斯VS A星心得分享,它和普通鞋子不同之处竟在这里!...
  5. 吉林大学计算机科学与技术学院推免,2017吉林大学计算机科学与技术大学生推免夏令营...
  6. java如何做测试数据库_如何模拟用于测试的数据库(Java)?
  7. Kafka常用操作命令总结
  8. 少儿编程:玩游戏不如设计游戏!
  9. IDApython 命令
  10. Netlink 介绍(译)