温故知新、勤总结,才能生巧!这次总结一下 :Core Foundation框架到Foundation桥接的三种方式

Foundation提供OC的基础类(像NSObject)、基本数据类型等。
Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能;


XXX为OC的字符串
桥接方式一、
     
(__bridgeNSString *)(XXX);
桥接方式二、
   CFBridgingRelease(XXX)
桥接方式三、
   (__bridge_transferNSString*)
(XXX);

Core Foundation的内存管理:
     Core Foundation是一组C语言,ARC下,C语言的框架并不会自动释放;
     使用桥接方式一的时候,必须需要手动释放内存;
     
CFRelease(XXX);
     在使用桥接方式二、桥接方式三时,则会自动化释放内存;

举例说明:
    以一个获取通讯录联系人说明:
    首先导入通讯录的框架:
    1、#import<AddressBookUI/AddressBookUI.h>
        2、遵循代理;

3、实现相关代理方法

#import "ViewController.h"
#import <AddressBookUI/AddressBookUI.h> @interface ViewController ()<ABPeoplePickerNavigationControllerDelegate> @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
} - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
ABPeoplePickerNavigationController *peopleVc = [[ABPeoplePickerNavigationController alloc] init];
peopleVc.peoplePickerDelegate = self;
[self presentViewController:peopleVc animated:YES completion:nil];
} #pragma -mark ABPeoplePickerNavigationControllerDelegate
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person{ // 桥接方式一
// CFStringRef firstNameRef = ABRecordCopyValue(person, kABPersonSortByFirstName);
// CFStringRef lastNameRef = ABRecordCopyValue(person, kABPersonSortByFirstName);
//
// NSString *firstName = (__bridge NSString *)(firstNameRef);
// NSString *lastName = (__bridge NSString *)(lastNameRef);
// NSLog(@"%@ %@",firstName,lastName);
//
// CFRelease(firstNameRef);
// CFRelease(lastNameRef); // 桥接方式二
// CFStringRef firstNameRef = ABRecordCopyValue(person, kABPersonSortByFirstName);
// CFStringRef lastNameRef = ABRecordCopyValue(person, kABPersonSortByFirstName);
//
// NSString *firstName = CFBridgingRelease(firstNameRef);
// NSString *lastName = CFBridgingRelease(lastNameRef);
// NSLog(@"%@ %@",firstName,lastName); // 桥接方式三
CFStringRef firstNameRef = ABRecordCopyValue(person, kABPersonSortByFirstName);
CFStringRef lastNameRef = ABRecordCopyValue(person, kABPersonSortByFirstName); NSString *firstName = (__bridge_transfer NSString *)(firstNameRef);
NSString *lastName = (__bridge_transfer NSString *)(lastNameRef);
NSLog(@"%@ %@",firstName,lastName); }
@end

iOS-Core Foundation框架到Foundation桥接的三种方式的更多相关文章

  1. JavaWeb_(Struts2框架)Struts创建Action的三种方式

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  2. iOS --- UIWebView的加载本地数据的三种方式

    UIWebView是IOS内置的浏览器,可以浏览网页,打开文档  html/htm  pdf   docx  txt等格式的文件.  safari浏览器就是通过UIWebView做的. 服务器将MIM ...

  3. 79、iOS 的Cocoa框架、Foundation框架以及UIKit框架

    Cocoa框架是iOS应用程序的基础 1. Cocoa是什么? Cocoa是 OS X和ios 操作系统的程序的运行环境. 是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发 ...

  4. ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式

    由于ASP.NET Core应用是一个同时处理多个请求的服务器应用,所以在处理某个请求过程中抛出的异常并不会导致整个应用的终止.出于安全方面的考量,为了避免敏感信息的外泄,客户端在默认的情况下并不会得 ...

  5. iOS 开发之 - 关闭键盘 退出键盘 的5种方式

    iOS 开发之 - 关闭键盘 退出键盘 的5种方式   1.点击编辑区以外的地方(UIView) 2.点击编辑区域以外的地方(UIControl) 3.使用制作收起键盘的按钮 4.使用判断输入字元 5 ...

  6. java:struts框架2(方法的动态和静态调用,获取Servlet API三种方式(推荐IOC(控制反转)),拦截器,静态代理和动态代理(Spring AOP))

    1.方法的静态和动态调用: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCT ...

  7. iOS字体加载三种方式

    静态加载 动态加载 动态下载苹果提供的多种字体 其他 打印出当前所有可用的字体 检查某字体是否已经下载 这是一篇很简短的文章,介绍了 iOS 自定义字体加载的三种方式. 静态加载 这个可以说是最简单最 ...

  8. iOS拨打电话的三种方式

    iOS拨打电话的三种方式 1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 1 2 var string = "tel:" + "1 ...

  9. ios网络学习------4 UIWebView的加载本地数据的三种方式

    ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...

随机推荐

  1. 关于Tomcat+Nginx负载均衡与Jmeter服务器测压的日记

    Jmeter测压 1.Jmeter-5.1.1下载:http://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-5.1.1.zip 2 ...

  2. vue.use()方法从源码到使用

    在做 vue 开发的时候大家一定经常接触 Vue.use() 方法,官网给出的解释是: 通过全局方法 Vue.use() 使用插件:我觉得把使用理解成注册更合适一些,首先看下面常见的注册场景. 1 2 ...

  3. jmeter学习之安装篇(一)

    一.Jmeter简介 Jmeter是Apache组织开发的基于Java开源项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做的比较成熟,因此,常被用做接口功能测试和性能测试. Jme ...

  4. 初涉WebGL

    之前一直在捣鼓Vue和React栈,对组件化架构项目有了些理解和体会.今天尝尝WebGL,当然,并不打算现在深入,只是略作了解,我知道这个坑很深. js的图形库.3d库也有好几款比较流行的,如游戏开发 ...

  5. Redux:action

    引入redux之后,代码中对组件state的更新变得规范而可控,不再是分散的一句句setState,而是将组件的state集合在一个单例store中,并以引用的方式获取各自的state. 对于stat ...

  6. 适配器模式C++实现

    目录 类适配器 对象适配器 类适配器 #include <iostream> using namespace std; // Target class Target { public: v ...

  7. LightOJ1197

    题目链接:https://vjudge.net/problem/LightOJ-1197 题目大意: 给你 a 和 b (1 ≤ a ≤ b < 231, b - a ≤ 100000),求出 ...

  8. 破解webstorm 亲测有效

    一.首先安装好webstorm,并且配置hosts文件 二.使用以下激活码进行激活,亲测有效可以用到2099年 4RULSIH54N-eyJsaWNlbnNlSWQiOiI0UlVMU0lINTROI ...

  9. SqlServer2008查询性能优化_第一章

  10. [Objective-C] 003_内存管理

    Objective-C内存管理,基本原理. 1.为什么要进行内存管理? 由于移动设备的内存极其有限,所以分配每个APP使用的内存也是有限制的,app运行时内存占用较多的话,系统就会发出内存警告,严重时 ...