将应用程序从碳转移到可可

时间:2010-10-13 07:10:03

标签: objective-c cocoa macos macos-carbon

我正在开发一个应用程序,我需要将它的整个代码从carbon迁移到cocoa。我在大学时间和实习期间有C,C ++,python和Java编程经验,但从未接触过目标C或者在此之前为Mac(Carbon和Cocoa)做过任何编程。

那么,请你建议我一些资料来源,我应该如何进行整个迁移?

在网上进行研究后,我发现大多数人都建议使用以下书籍

Mac®OSX的可可编程,第三版由Aaron Hillegass提供

目标C中的编程 - Stephen Kochan

我有这两本书。

我应该首先阅读它们然后应该从代码更改开始吗? (这些都需要一些时间来阅读)

OR

在熟悉Obj C和Cocoa之后,我应该直接开始代码迁移吗?

此外,

由于我不知道碳,我应该怎样参考学习碳以获得足够的知识将碳代码迁移到可可?

2 个答案:

答案 0 :(得分:10)

首先,学习Carbon,这样您就可以阅读该程序并了解它目前的实施方式。

在Xcode中安装旧版文档集以访问Carbon指南。您需要阅读Carbon Overview,然后阅读Getting Started with Carbon,然后阅读“入门”链接的所有内容。你还需要学习Core Foundation,这是Carbon使用的一些更现代的部分;阅读Core Foundation Design ConceptsMemory Management Programming Guide for Core Foundation

然后,学习可可。

我没有通过希勒盖斯的书来学习,但很多人都发誓。我目前最喜欢的可可书是“Cocoa and Objective-C: Up and Running” by Scott Stevenson。我学习Cocoa的方式是使用Apple自己的文档。从The Objective-C Programming LanguageCocoa Fundamentals GuideMemory Management Programming Guide for Cocoa开始。上一篇文章的大部分内容似乎都很熟悉,但几乎没有。从头到尾一直阅读这些指南中的每一个。

一旦您学会了Cocoa的一般概念,您就可以继续学习更多特定于应用程序的材料。从Application Architecture Overview开始,以及该文档链接的大部分内容。 Cocoa Guides list包含完整的指南列表。

在未来的道路上,您还需要使应用程序与64位模式兼容。如果到那时你还有任何碳代码,你需要阅读64-bit Guide for Carbon Developers;无论哪种方式,您还需要常规64-bit Transition Guide64-bit Transition Guide for Cocoa

答案 1 :(得分:0)

我现在正在研究这个过程,对于使用一些框架的完整的基于文档的应用程序来说,这是一项相当复杂的工作。我的Carbon应用程序有许多菜单项,界面使用Carbon Nibs构建,并使用Carbon事件挂钩实现。编程语言是C ++。回顾历史,最初的Mac经典版本是在C语言中实现的,所以这个时代也有一些遗产。例如,基于资源的PICS!

有几种方法可以采取,所以这取决于您的具体情况如何进行。在我的情况下,我决定从一个基于Cocoa文档的裸项目开始,并开始构建文档加载代码,因为它的钩子已经在空项目中已经存在。对我来说,这似乎是一个很好的起点,因为它让我进入了与Cocoa合作的模式,并根据较小的部分思考应用程序。

你真的必须采用一种有条不紊的方法,看一下你的应用在Carbon中所依赖的内容与应用的哪些部分是独立的 - 例如你的抽象类。如果您的应用程序使用C ++,那么转换为纯Objective-C可能会有一些陷阱。例如,操作员覆盖可能很难注意到。

您可以将C ++与Objective-C混合使用,如Apple的Carbon-Cocoa Integration Guide和Web中所述,您可以找到大量Cocoa foundation objects like NSStrings的C ++包装器。因此,如果您已经拥有包装CFString的C ++类,这些可以派上用场。

一般来说,您可以保留数据存储空间。如果使用malloc()和calloc()来创建结构的链接列表,则没有特殊的理由转移到NSArray。你不会得到更好的表现。真正的变化来自接口,您调用和访问其他对象的数据的方式。如果您决定在同一个应用程序中混合C ++和Objective-C对象,则有助于尽可能地封装。也就是说,尽可能使您的抽象C ++类仅引用自己的数据和其他C ++对象的数据。最终,这将使它们更容易转换为Objective-C。

如果您正在从一个事件模型转换到另一个事件模型,或者从基于Carbon端口的映像转换到Cocoa基于视图的映像,那么最好先从一个全新的Objective-C应用程序开始,然后首先引入您的模型类。添加一些测试函数以确保它们都在新语言中工作。如果您的应用程序类似于我的(旧),则可能需要显示更大的内容,并在界面中进行更多润色。现在是逐个重建这些部件的好时机。

肯定没有很好的捷径。上面链接的PDF是我在该主题上找到的最佳文档。