温故知新、勤总结,才能生巧!这次总结一下 :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. Puppeteer笔记(一):Puppeteer简介

    一.Puppeteer简介 Puppeteer是NPM库,它提供了NodeJS高级API来控制Chrome.Puppeteer 默认以无头(无界面)方式运行,但也可以配置为运行有界面的Chrome. ...

  2. linux常用命令---用户相关操作

    用户相关操作

  3. php IE中文乱码

    echo mb_convert_encoding("你是我的朋友", "big5", "GB2312"); 详细出处参考:http://ww ...

  4. bzoj 1072状压DP

    1072: [SCOI2007]排列perm Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2293  Solved: 1448[Submit][St ...

  5. 如何在Teamcenter中使用PMI?

    1 .什么是PMI 在设计制造领域,PMI指的是产品制造信息(Productand Manufacturing Information),其目的在于在三维环境下,将制造信息从设计部门传递到制造部门.其 ...

  6. 【真相揭秘】requests获取网页编码乱码本质

    有没有被网页编码抓狂,怎么转都是乱码. 通过查看requests源代码,才发现是库本身历史原因造成的. 作者是严格http协议标准写这个库的,<HTTP权威指南>里第16章国际化里提到,如 ...

  7. [COCOS2DX-LUA]0-001.利用ClippingNode实现放大镜功能

    用过Iphone的都知道,Iphone在定位光标位置的时候会把内容进行放大,这样我们就能很快的把光标移动到指定的位置.那么在我们的Cocos2dX的游戏中,怎么可以实现这种功能呢.起先我就是想起了Ip ...

  8. [SD心灵鸡汤]002.每月一则 - 2015.06

    1.用最多的梦面对未来 2.自己要先看得起自己,别人才会看得起你 3.一个今天胜过两个明天 4.要铭记在心:每天都是一年中最美好的日子 5.乐观者在灾祸中看到机会:悲观者在机会中看到灾祸 6.有勇气并 ...

  9. 创建HttpFilter与理解多个Filter代码的执行顺序

    1.自定义的HttpFilter,实现Filter接口 HttpFilter package com.aff.filter; import java.io.IOException; import ja ...

  10. 深度学习入门: CNN与LSTM(RNN)

    1. 理解深度学习与CNN: 台湾李宏毅教授的入门视频<一天搞懂深度学习>:https://www.bilibili.com/video/av16543434/ 其中对CNN算法的矩阵卷积 ...