温故知新、勤总结,才能生巧!这次总结一下 :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. vue组件试错

    [Vue warn]: Property or method "child1" is not defined on the instance but referenced duri ...

  2. Java创建线程的方式

    Java中线程的创建有四i种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 3.应用程序 ...

  3. flask之Flask-session三方组件

    from flask import Flask, views, render_template, request, session, redirect import redis as redis #p ...

  4. Gym101630C Connections

    题目大意: 给出一个\(n\)个点\(m\)条边的有向图,无自环无重边.要求把这个图进行删边,直到只剩下\(2n\)条边,使得图中每个点都可以相互连通. 知识点: DFS 解题思路: 从点\(1\)出 ...

  5. Getting Started With Node and NPM

    Getting Started with Node and NPM Let's start with the basics. Install Node.js: https://nodejs.org.

  6. fastclick从接触到丢弃

    fastclick简介 fastclick是一款为了解决移动端300ms点击延迟而诞生的插件. 在移动端,如果对页面没有做任何处理,点击一个元素,触发的事件流程可简单理解为:touch -> 经 ...

  7. Web前端:1、HTML&CSS概述及结构

    万维网联盟(World Wide Web Consortium)简称W3C,专门为了定义网页相关的标准而成立,如网页中的HTML.CSS.DOM.HTTP.XML等标准. 根据W3C标准,一个网页主要 ...

  8. react中路由不起作用的奇怪现象

    同样的两段Router代码,为什么一段正常,一段不起作用(也没有任何错误log提示) 瞪着眼观察也看不出为什么... 通过选中高亮显示内容相同, 为何就是有一段路由不管用呢? 折腾半天发现... 大小 ...

  9. [MSSQL] [EntityFramework(.Net Core)] 自增长id字段,无法插入数据

    IDENTITY_INSERT 为 OFF,无法插入数据, 类似的错误,解决记录: 网上查了下,都是 Code First 模式下的解决方案, 如:在 DBContext 的 OnModelCreat ...

  10. Android_存储之SharedPreferences

    一.概述 SharedPreferences是一种轻量级的数据存储方式,采用键值对的存储方式. SharedPreferences只能存储少量数据,大量数据不能使用该方式存储,支持存储的数据类型有bo ...