ARC下带CF前缀的类型与OC类型转换
在对钥匙串操作时这个函数
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类型转换相关推荐
- c语言arc函数带几个参数,ARC的使用简要总结
.h文件中: 1,@property (strong,nonatomic)中属性的定义主要是类对外的接口,将retain,copy等变为strong. 2,私有变量 .m文件中的类扩展定义的私有属性变 ...
- python查看数据类型的方法_pycharm下查看python的变量类型和变量内容的方法
pycharm下查看python的变量类型和变量内容的方法 用过Matlab的同学基本都知道,程序里面的变量内容可以很方便的查看到,但python确没这么方便,对于做数据处理的很不方便,其实不是没有这 ...
- Objective-C中,ARC下的 strong和weak指针原理解释
Objective-C中,ARC下的 strong和weak指针原理解释 提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是& ...
- 能在ARC下跑的ASIHTTPRequest框架(以及升了5.0,用了ARC后N多开源框架不能用的解决方案) .
能在ARC下跑的ASIHTTPRequest框架(以及升了5.0,用了ARC后N多开源框架不能用的解决方案) 2011-11-06 10:02 100人阅读 评论(0) 收藏 举报 能在ARC下跑的A ...
- C++下的OpenCV中Mat类型存储的图像格式
在调用CV进行图像处理时,经常涉及图像格式转换,经常出现原始图像输入后CV_32F与ushort之间的数据差异导致程序报错,可使用std::cout << "dilated_ty ...
- IOS学习 ARC下__bridge
总结于 IOS Tuturial 中 ARC两章,详细在dropbox pdf 文档. Toll-Free Bridging 当你在 Objective-C 和 Core Foundation 对象之 ...
- 能在ARC下跑的ASIHTTPRequest框架(以及升了5.0,用了ARC后N多开源框架不能用的解决方案)
我在ios5sdk开发中,遇到asihttp因为arc的缘故,报了很多错,网上找了一上午,没找到一个具体解决办法.后来无意中发现,在target下面的build phases下有一个compile s ...
- 解决ARC下performselector-may-cause-a-leak-because-its-selector-is-unknown 警告
在ARC下使用 [theTarget performSelector:theTarget withObject:Nil]; 会出现警告:performselector-may-cause-a-leak ...
- linux下带密码的scp,linux下带密码的scp
from linux下带密码的scp (2014-03-10 12:35:46) 背景: 需要将一台机器的数据传输到另外一台机器上,两台机器没有信任关系,没有数据源一方没有ftp或者http,无法进行 ...
最新文章
- Codeforces 920D Tanks (看题解)
- GEF调色板中的多级树结构
- windows窗体(winform)中嵌入显示Excel工作表。
- 【算法竞赛学习】金融风控之贷款违约预测-数据分析
- 什么是Session?
- java编程思想学习(3):Java中的private、protected、public和default的区别
- 使用postman模拟百度通用文字识别
- java怎么知道上传文件是否成功_文件包含漏洞之——tomcat CVE-2020-1938漏洞复现
- 一个面试题关于变量的生命周期
- mfc 对话框应用程序 如何利用按钮弹出另一对话框
- python练手经典100例-Python 的练手项目有哪些值得推荐?
- 机器学习项目简历收集册-----机器学习(仅供参考)
- Fedora9下codeblocks安装无法编译的问题
- Jmeter_基本操作-取样器
- 转:PV、UV、访问次数、跳出率、转化率、平均访问时长
- lsyncd搭建和使用(含rsync配置)
- LED指示灯在常见网络设备故障诊断中的应用
- kindle如何设置不闪屏_kindle闪屏怎么解决
- 添加虚拟机镜像centso 8的步骤
- latex附录中放python代码_LaTeX之附录设置
热门文章
- pytorch下载mnist超时解决方案
- 【解决方案】requests.exceptions.SSLError: HTTPSConnectionPool
- Ubuntu 使用root 帐号开启 SSH 登录
- alpinestars与丹尼斯_骑行靴|丹尼斯VS A星心得分享,它和普通鞋子不同之处竟在这里!...
- 吉林大学计算机科学与技术学院推免,2017吉林大学计算机科学与技术大学生推免夏令营...
- java如何做测试数据库_如何模拟用于测试的数据库(Java)?
- Kafka常用操作命令总结
- 少儿编程:玩游戏不如设计游戏!
- IDApython 命令
- Netlink 介绍(译)