没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
37页
无论您在开发应用程序时选择哪一种开发环境——Cocoa或Carbon——您可能会发现,另一种开发环境提供了您想要在应用程序中使用的功能。选择Cocoa或Carbon开发环境来创建新的应用程序并没有限制您必须使用该环境中定义的API。您可以在Cocoa应用程序中使用Carbon的API,也可以在Carbon应用程序中使用Cocoa的API。本文档将向您介绍具体的使用方法。
资源推荐
资源详情
资源评论
Carbon-Cocoa 集成指南概述
无论您在开发应用程序时选择哪一种开发环境——Cocoa 或 Carbon——您可能会发现,另一种开发环境
提供了您想要在应用程序中使用的功能。选择 Cocoa 或 Carbon 开发环境来创建新的应用程序并没有限制
您必须使用该环境中定义的 API。您可以在 Cocoa 应用程序中使用 Carbon 的 API,也可以在 Carbon 应
用程序中使用 Cocoa 的 API。本文档将向您介绍具体的使用方法。
出于许多原因,您可能希望在应用程序中集成 Cocoa 和 Carbon,如:
您既想使用现有的代码,又想利用另一框架提供的技术。
您正在开发一个对 Carbon 和 Cocoa 都可用的公共服务。
对于某些任务来说,在 Cocoa 环境下比在 Carbon 环境下更易于完成;而对于另一些任务来说,
情况正相反。
您已经在一种环境下创建了一个很棒的用户界面,但您想通过另一种环境访问该界面。
您的程序设计团队由具有不同技能——Cocoa 和 Carbon——的工程师组成。
谁应该阅读本文档?
本文档假定您使用Objective-C进行Cocoa编程,并且不讨论有关Java集成的问题。为了充分理解本文档,
您最好具备Cocoa或Carbon环境下的编程经验,并且对其它编程环境的基础知识也有所了解。“参考”
部分
包含了能够帮助您了解这些知识的文档列表。
本文档的组织结构
在程序中集成 Cocoa 和 Carbon 之前,您应该熟悉一些基本概念。这些概念会在以下文章中详细介绍:
“Carbon和Cocoa用户接口间通信”讨论了Mac OS X如何在Carbon和Cocoa应用程序环境之间传
递用户事件。
“混合语言代码的预处理”列出了当您在一个项目中混合使用不同的编程语言时,可使用的文件扩
展名。
“可交互的数据类型”提供了有关Foundation(Cocoa)和Core Foundation(Carbon)之间可以交
换使用的数据类型的信息。
“在应用程序中同时使用 Carbon 和 Cocoa”提供了在一个应用程序中同时使用 Carbon 和 Cocoa
代码的简要介绍。包括对封装成 C 接口的函数的介绍。
在上述文档中讨论的概念将实际应用于下列文档提供的示例代码中:
“在Carbon程序中使用Cocoa功能”介绍了如何在Carbon应用程序中使用与用户接口无关的Coc
功能。
oa
原文地址:http://www.apple.com.cn/developer/Documentation/index.html
整理:http://www.wikinese.com/forum/
“在Cocoa程序中使用Carbon功能”介绍了如何在Cocoa应用程序中使用与用户接口无关的Carb
功能。
on
“在Carbon程序中使用Cocoa用户接口”介绍了怎样才能使Cocoa用户接口在Carbon中正常工作。
“在Cocoa程序中使用Carbon用户接口”介绍了怎样才能使Carbon用户接口在Cocoa中正常工作。
“HICocoaView:在Carbon窗口中使用Cocoa视图”介绍了在Mac OS X v10.5 中引入的
HICocoaView是如何使在Carbon窗口中使用Cocoa视图成为可能的。
“在导航服务对话框中使用Cocoa”介绍了使用Mac OS X v10.5 中“导航服务”的Carbon应用
如何能够直接访问Cocoa类
NSOpenPanel和NSSavePanel的功能的。
程序是
参考
关于开发 Mac OS X 应用程序,特别是 Cocoa 和 Carbon 应用程序的更多信息,请参考下列文档:
Cocoa
步
和Carbon
入门初步入门初
分别为不熟悉Cocoa和Carbon的开发人员提供了相关的指导
性介绍以及学习途径。
集成开发环
学习途径。
技术概述
并提供了相关文档的链接。
附录 A“Mac OS X 框架”列出了对 Mac OS X 开发人员可用的框架。
理编程指南
应用程序
中使用 Carbon 窗口或在 Carbon 应用程序中使用 Cocoa 窗口是一项充满挑战的工作。本文概要地介绍了
图 1 显示了一 Carbon 和 Cocoa 应用程序环境的路径。当控制
输入设备(如鼠标)的驱动程序检测到用户操作,则产生一个用户事件,并将其传递给窗口服务器。
工具和语言初步
为不熟悉 Apple 境(IDE)的开发人员提供了相关的指导性介绍以及
Mac OS X 对可用于 Mac OS X 的技术进行了大体上的介绍,
Cocoa
内存管
介绍了对象所有权策略及其相关的用于创建、复制和销毁对象的技术。
Carbon 和 Cocoa 用户接口间的通信
在 Mac OS X 的版本 10.2 之前,由于用户事件生成以及传递至应用程序的方式不同,在 Cocoa
用户事件的处理过程,并大致描述了 Carbon 和 Cocoa 是如何向彼此传递用户事件的。
个用户事件(如单击或按键)通过系统到达
图 1 用户事件在 Mac OS X 中的路径
原文地址:http://www.apple.com.cn/developer/Documentation/index.html
整理:http://www.wikinese.com/forum/
当窗口服务器接收到该事件时,它将查询当前所有打开的窗口。然后,窗口服务器会将事件发送到运行循
环的事件端口,该运行循环隶属于事件发生的窗口所在的进程。事件管理器从运行循环端口处获取事件,
并以适当的格式将事件打包,再将其传递给进程的应用程序环境所特有的事件处理机制。该机制确保了事
件能够被与点击的控件(或按下的按键)相关联的函数或方法所处理。
在 Mac OS X 的版本 10.2 之前,事件被传递给进程的应用程序环境。所以,当一个 Carbon 应用程序试图
使用 Cocoa 窗口时,Cocoa 窗口对应的事件会被传递给 Carbon 应用程序。但由于 Carbon 应用程序没有
的事件的处理函数,也无法将事件传递给创建窗口的 Cocoa 环境,因此该事件将被丢弃。反过来,对于一
个 Cocoa 应用程序中的 Carbon 窗口来说也是这样。Carbon 窗口对应的事件会被传递给 Cocoa 应用程序,
但 Cocoa 应用程序没有该事件的处理函数,也无法将该事件传递给 Carbon 环境。
从 Mac OS X 的版本 10.2 开始,系统会自动安装相应的处理函数,从而可以在 Cocoa 和 Carbon 两种环
境之间传递事件。图 2 显示了对于使用 Cocoa 资源的 Carbon 应用程序(图中左侧)和使用 Carbon 资源
的 Cocoa 应用程序(图中右侧),Carbon 和 Cocoa 环境之间的通信路径。
让我们首先看一看,在用于 Carbon 应用程序的 Cocoa 窗口中,用户事件的传递是如何进行的。系统会自
动为 Cocoa 窗口的
WindowRef 对象安装 Carbon 事件处理函数。当一个用户事件(例如,点击按钮)在
Cocoa 窗口中发生时,该用户事件被传递给 Carbon 应用程序。Carbon 应用程序将用户事件分派给对应于
Cocoa 窗口的
WindowRef 对象的事件处理函数。由系统提供的事件处理函数知道如何将事件打包为一个
Cocoa 的 NSEvent 对象,然后会将该 NSEvent 对象传递 Cocoa 窗口通过正常的 Cocoa 事件处理机制来
处理,包括不针对某个具体控件的事件响应链。就点击按钮而言,按钮会接收到点击按钮的事件,并使用
正常的 Cocoa 目标动作机制处理该事件。
图 2 Carbon 和 Cocoa 之间的事件传递
原文地址:http://www.apple.com.cn/developer/Documentation/index.html
整理:http://www.wikinese.com/forum/
反过来,对于用于 Cocoa 应用程序中的 Carbon 窗口,系统会自动创建一个 Cocoa 的 NSWindow 对象来
代表 Carbon 窗口。当用户点击 Carbon 窗口中的按钮时,与点击按钮这一动作对应的 NSEvent 对象会传
递给 Cocoa 应用程序。Cocoa 的正常事件处理机制会将该事件传递给由系统提供的对应 Carbon 窗口的
NSWindow 对象。NSWindow 对象知道如何创建一个 Carbon 事件,并将其传递给 Carbon 窗口的事件处
理函数。从这儿开始,事件通过 Carbon 的事件目标层级体系被处理。
总之,由于 Mac OS X 在用户接口元素层(而不是在应用程序层)提供 Cocoa 和 Carbon 间自动转换的机
制,因此 Carbon 和 Cocoa 可以共享相同的窗口。
关于应用程序环境和系统架构的更多信息,请参考 Mac OS X
技术概述
。欲了解更多有关 Carbon 事件的
信息,请参考 Carbon
事件管理器编程指南
。欲了解更多有关 Cocoa 事件的信息,请参考 Cocoa 编程主题
—— Cocoa
事件处理指南
。
混合语言代码的预处理
Carbon 和 Cocoa 各自的 API 使用不同的语言。Carbon 使用 C,而 Cocoa 使用 Objective-C。此外,Carbon
程序员可能更喜欢使用 C++。当您生成一个应用程序,而该程序同时使用了 C、Objective-C、Objective-C++
和 C++文件时,您必须确保编译器会执行相应的预处理。需要编译的文件的扩展名表明了编译的类型,如
表 1 所示。
表 1 文件扩展名和编译
文件扩展名 对编译器的指示
.c
必须预处理的 C 源代码
.m
Objective-C 源代码
.mm
Objective-C++源代码
.h
头文件(不会被编译或链接)
.cc, .cp, .cxx, .cpp, .c++, .C
必须预处理的 C++源代码
原文地址:http://www.apple.com.cn/developer/Documentation/index.html
整理:http://www.wikinese.com/forum/
在一个 Xcode 项目中,您可以通过改变文件类型来覆盖源文件的扩展名。文件类型决定了 Xcode 预处理
和编译该文件的方式。例如,假定您想要向一个以
.c 为文件扩展名的 C 源文件中添加 Objective-C 代码。
您可以按照如下步骤检查和修改此源文件的文件类型:
1. 在项目窗口中选择该 C 源文件。
2. 打开“文件信息”窗口并选择“通用”面板。
3. 找到“文件类型”设置项。
4. 将其值改为“sourcecode.c.objc”。
现在,Xcode 就能够编译文件中的 Objective-C 代码了。
您也可以指示 Xcode 将项目中的所有源文件当做是以同一种语言编写的来进行处理,不管它们的文件扩展
名和文件类型是什么。例如,假设您要向多个 C++源文件中添加 Objective-C 代码。为了指明编译器把所
有的源文件看作 Objective-C++文件,应进行以下操作:
1. 在项目窗口的“组和文件”面板中选中该项目。
2. 打开“项目信息”窗口,选择“生成”面板。
3. 找到“将源文件编译为”设置项。
4. 将其值“根据文件类型”改为“Objective-C++”。
现在,Xcode 就能够编译您所有 C++文件中的 Objective-C 代码了。您也可以针对每个目标文件分别改变
该设置。
关于完整的 Xcode 文档,请参考 ADC 参考库中工具类的文档。Xcode 用
户指南也可以从 Xcod
e 应用程序
的“帮助”菜单中获得。
可交互的数据类型
在 Core Foundation 框架(Carbon)和“基础”框架(Cocoa)中存在许多可以交互使用的数据类型。这意
味着:您可以使用同样的数据结构作为 Core Foundation 函数调用的参数和 Objective-C 消息调用的接收
者。例如,
NSLocale(见 NSLocale
类参考
)和 Core Foundation 中与之相对应的 CFLocale(见 CFLocale
参考
)是可以互换的。 因此,在一个需要 NSLocale *参数的方法中,您可以传递一个 CFLocaleRef 实
例。同样在一个需要
CFLocaleRef 参数的函数中,您可以传递一个 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);
原文地址:http://www.apple.com.cn/developer/Documentation/index.html
整理:http://www.wikinese.com/forum/
剩余36页未读,继续阅读
资源评论
- wannalua2015-12-23这个属于宝藏级别的了,很难找到的资源了
- nsm11682013-09-06做为了解还可以。不够深入。
- ehldragon2015-03-03有了他,对这部分知识又有了深入的认识
- 百良西瓜2011-10-15MAC平台上两种新老编程模型的简介,呵呵,可做了解,谢谢LZ分享
白板码匠
- 粉丝: 4
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Flume进阶-自定义拦截器jar包
- Dubins曲线算法讲解和在运动规划中的使用.pdf
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.dta
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.xlsx
- Reeds+Shepp曲线算法讲解和实现.pdf
- 毕业设计基于SpringBoot+MyBatisPlus+MySQL+Vue的外卖配送信息系统源代码+数据库
- 词向量(Word Embeddings)是自然语言处理(NLP)领域的一种重要技术.txt
- Surfer,线性函数
- MyBatis 的动态 SQL 是其核心特性之一.txt
- 时代的sdddsddsddsd
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功