Toll-Free Bridging 对象桥接(Xcode文档翻译)

译者序:

带学生看Xcode API 文档的时候,总有学生被通篇的英文搞晕,并询问是否有中文版。

初步搜索和询问的结果是,中文版有但是很少。(如果知道哪里有,希望能够分享一下这个信息)

于是决心从今天开始对Xcode API进行翻译,这次的主题是"Toll-Free Bridging"。

英文原版版权归苹果公司所有,翻译内容仅供学习参考。

首发网址:http://blog.csdn.net/duzixi/article/details/38325021

-----------------------------------------------

Toll-Free Bridging

对象桥接

There are a number of data types in the Core Foundation framework and the Foundation framework that can be used interchangeably. This capability, called toll-free bridging, means that you can use the same data type as the
parameter to a Core Foundation function call or as the receiver of an Objective-C message. For example,NSLocale (see NSLocale Class Reference) is interchangeable
with its Core Foundation counterpart, CFLocale (see CFLocale Reference). Therefore, in a method where you see an
NSLocale * parameter, you can pass aCFLocaleRef, and
in a function where you see aCFLocaleRef parameter, you can pass anNSLocale
instance. You cast one type to the other to suppress compiler warnings, as illustrated in the following example.

Core Foundation框架和Foundation框架中有大量的数据类型能被可交换的使用。这个能力被称之为“对象桥接”,这就意味着你可以使用相同的数据类型作为Core Foudation函数调用的参数或者Objective-C消息的接受者。例如,NSLocale(参见NSLocale Class Reference)和它Core Foundation对应者CFLocale(参见 CFLocale Reference)是可交换的。因此,如果你在方法中看到了NSLocale
*类型的参数,你就可以传入一个NSLocale对象。你通过传入一个类型到另一个去阻止编译警告,代码如下:

NSLocale *gbNSLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];

CFLocaleRef gbCFLocale = (CFLocaleRef) gbNSLocale;

CFStringRef cfIdentifier = CFLocaleGetIdentifier (gbCFLocale);

NSLog(@"cfIdentifier: %@", (NSString *)cfIdentifier);

// logs: "cfIdentifier: en_GB"

CFRelease((CFLocaleRef) gbNSLocale);

CFLocaleRef myCFLocale = CFLocaleCopyCurrent();

NSLocale * myNSLocale = (NSLocale *) myCFLocale;

[myNSLocale autorelease];

NSString *nsIdentifier = [myNSLocale localeIdentifier];

CFShow((CFStringRef) [@"nsIdentifier: " stringByAppendingString:nsIdentifier]);

// logs identifier for current locale

Note from the example that the memory management functions and methods are also interchangeable—you can useCFRelease with
a Cocoa object andrelease andautorelease with a Core
Foundation object.

值得注意的是,内存管理函数和方法也可交换的——你可以让Cocoa对象去使用CFRelease函数并且让Core Foundation对象去使用release和autorelease方法。

Note: When using garbage collection, there are important differences to how memory management works for Cocoa objects and Core Foundation objects. See “Using Core Foundation with Garbage Collection” for details.

注意:当使用垃圾回收机制时,Cocao对象和Core Foundation对象的内存管理有很大的不同。详细请参见“Using Core Foundation with Garbage Collection”。

Toll-free bridging has been available since OS X v10.0. Table 13-1 provides a list of the data types that are interchangeable between Core Foundation and Foundation. For each pair, the table also lists the version of OS X
in which toll-free bridging between them became available.

对象桥接从OS X v10.0版本开始可用。表格 13 - 1 提供了能在Core Fundation框架和Foundation框架之间交换使用的数据类型列表。对于每一对,表格也列出了 OS X中对象桥接可用的版本信息。

Table 13-1  Data types that can be used interchangeably between Core Foundation and Foundation

表格 13-1 能够在Core Foundation框架和Foundation框架之间交换使用的数据对象

Core Foundation type        Foundation class               Availability  

Core Foundation类型          Foundation类(基础类)     可用版本

CFArrayRef                        NSArray                
           OS X v10.0

CFAttributedStringRef   NSAttributedString 
     OS X v10.4

CFCalendarRef                  NSCalendar                 
     OS X v10.4

CFCharacterSetRef           NSCharacterSet 
             OS X v10.0

CFDataRef                          NSData                
             OS X v10.0

CFDateRef                          NSDate                
             OS X v10.0

CFDictionaryRef               NSDictionary
                 OS X v10.0

CFErrorRef                         NSError               
           OS X v10.5

CFLocaleRef                      NSLocale                
         OS X v10.4

CFMutableArrayRef           NSMutableArray
             OS X v10.0

CFMutableAttributedStringRef NSMutableAttributedStringOS
X v10.4

CFMutableCharacterSetRefNSMutableCharacterSet OS
X v10.0

CFMutableDataRef              NSMutableData 
             OS X v10.0

CFMutableDictionaryRef   NSMutableDictionary 
 OS X v10.0

CFMutableSetRef                NSMutableSet 
               OS X v10.0

CFMutableStringRef          NSMutableString 
         OS X v10.0

CFNumberRef                        NSNumber              
         OS X v10.0

CFReadStreamRef                NSInputStream 
             OS X v10.0

CFRunLoopTimerRef            NSTimer                     
     OS X v10.0

CFSetRef                             NSSet               
               OS X v10.0

CFStringRef                       NSString                
       OS X v10.0

CFTimeZoneRef                   NSTimeZone               
     OS X v10.0

CFURLRef                             NSURL                
             OS X v10.0

CFWriteStreamRef             NSOutputStream
             OS X v10.0

Note: Not all data types are toll-free bridged, even though their names might suggest that they are. For example,NSRunLoop
is not toll-free bridged to CFRunLoop,NSBundle is not toll-free bridged to CFBundle, andNSDateFormatter
is not toll-free bridged to CFDateFormatter.

注意:并不是所有的类型都是对象桥接,尽管其名称让它们看上去很像。例如,NSRunLoop和CFRunLoop不能对象桥接,NSBundle和CFBundle不能对象桥接,NSDateFormatter和CFDateFormatter不能对象桥接等。

Copyright ? 2012 Apple Inc. All Rights Reserved.Terms of Use |
Privacy Policy | Updated: 2012-01-09

Toll-Free Bridging 对象桥接(Xcode文档翻译),布布扣,bubuko.com

时间: 2024-10-06 13:53:27

Toll-Free Bridging 对象桥接(Xcode文档翻译)的相关文章

ios Toll-Free Bridging

有一些数据类型是能够在 Core Foundation Framework 和 Foundation Framework 之间交换使用的.这意味着,对于同一个数据类型,你既可以将其作为参数传入 Core Foundation 函数,也可以将其作为接收者对其发送 Objective-C 消息(即调用ObjC类方法).这种在 Core Foundation 和 Foundation 之间交换使用数据类型的技术就叫 Toll-Free Bridging. 举例说明,NSString和CFStringR

单个对象内存管理

前文我们已经说了内存管理的原则:只要出现了new alloc retain ,就一定会配对出现一个release,autorelease 那么当我一个对象被释放之后,如果我们再次调用这个对象的方法(包括这个对象的retain release方法),将会出现 野指针 错误,在xcode中具体表现为 EXC_BAD_ACCESS:访问了不可访问的内存空间,就会导致这个错误. 下面这个例子#import <Foundation/Foundation.h> int main (int argc, co

理解 Objective-C 的 ARC

英文原文:Understanding Automatic Reference Counting in Objective-C 自动引用计数(Automatic Reference Counting, ARC)把压在程序员们肩头的管理内存的重担卸除了不少,更不用说让跟踪内存泄漏那样的烦心事也少了很多.不过,虽然ARC很棒,我们仍然不能完全把内存管理这回事儿抛在脑后. 这篇文章将要讨论以下方面的问题,帮助大家快速进入ARC的世界. 内存的引用计数: 快速复习 ARC的工作原理 在工程中开启ARC A

ios面试题整理(答案有的是网上找的,有的是根据理解自己做的)

1.ViewController的生命周期 按结构可以对iOS的所有ViewController分成两类: 1.主要用于展示内容的ViewController,这种ViewController主要用于为用户展示内容,并与用户交互,如UITableViewController,UIViewController. 2.用于控制和显示其他ViewController的ViewController.这种ViewController一般都是一个ViewController的容器.如UINavigation

iOS iPhone SDK 包含哪些东西?

iPhone SDK 包含哪些东西? 第一部分: 在使用Intel芯片的Macintosh计算机开发iOS应用程序所需的全部接口.工具以及资源全都包含于iPhone SDK. 苹果公司将大部分系统接口发布在框架这种特殊的数据包.一个框架就是一个目录,它包含一个动态共享库以及使用这个库所需的资源(例如头文件.图像以 及帮助应用程序等).如果要使用某个框架,则需要将其链接到应用程序工程,这一点和使用其他共享库相似.另外,您还需要告知开发工具何处可以找到框架头文 件以及其他资源. 除了使用框架,苹果公

IOS学习笔记一

想学 IOS已久,但由于各项目太紧,另外因为比较懒,一直抽不出时间来学习.今天终于静下心,启动IOS学习计划. 工具准备:Mac一台,下载Xcode, 苹果实在太好了,什么东西都已经帮你做好了,连工具都集成好了.这点,android就显得太low了. 1. 了解一下IOS的四层结构, 由下往上依次是:Core OS(系统Lib层,SDK的调用),   Core Services核心服务层,  Media层以及Cocoa Touch, 这里,可以跟安卓的四层结构作个对比, android四层由下而

Core Foundation(CFString为例)

转载 http://limboy.me/ios/2013/06/07/core-foundation.html 先来说说「Core Foundation」(以下简称CF)的历史吧.当年乔布斯被自己创办的公司驱逐后,成立了「NeXT Computer」,其实做的还是老本行:卖电脑,但依旧不景气.好在NeXTSTEP系统表现还不错,亏损不至于太严重.正好此时苹果的市场份额大跌,急需一个新的操作系统,结果大家都知道了,乔布斯借此收购,重新回到了苹果. 这里就牵扯到了一个问题,如何让旧有的系统(Mac

IOS计划 分析

1.基本介绍 IOS苹果公司iPhone.iPod touch和iPad操作系统和其他设备的发展. 2.知识点 1.IOS系统 iPhone OS(现在所谓的iOS)这是iPhone, iPod touch 和 iPad 设备的操作系统. 1.Core OS: 它是用FreeBSD和Mach所改写的Darwin, 是开源.符合POSIX标准的一个Unix核心.这一层包括或者说是提供了整个iPhone OS的一些基础功能,比方:硬件驱动, 内存管理.程序管理,线程管理(POSIX).文件系统,网络

Core Services 层

Core Services层为所有的应用程序提供基础系统服务.可能应用程序并不直接使用这些服务,但它们是系统很多部分赖以建构的基础. 高阶特性 下面的部分描述一些比较常见特性,也许您正打算让您的应用程序支持这些特性. 块对象 iOS 4.0引入了块对象.块对象是C级别的构造,您可以在C或Objective-C代码中使用快对象.从本质上说,块对象本质上是一个匿名函数加上该函数的伴随数据.有些时候,其他语言也称块对象为 closure或者lambda.块对象非常适用于回调函数.如果您需要有很便捷的方