Cocoa与Cocoa Touch - 有何区别?

57

我正在学习使用Objective-C进行iOS开发,找到了很多代码示例。

其中一些示例说明它们仅适用于Mac OS X(而非iOS)。

请问有人能解释一下Cocoa和Cocoa Touch之间在库级别上的区别吗?这样我就能知道哪些代码可用,哪些不可用了。

7个回答

101

Cocoa通常被称为Foundation和AppKit框架的组合,而Cocoa Touch则是Foundation和UIKit框架的组合。

Cocoa和Cocoa Touch位于其他框架集合之上,创建API堆栈。其他层包括Media、Core Services和Core OS。

Cocoa和Cocoa Touch的主要区别在于UI类和API不同于Mac OS X和macOS的,因此,您使用UITextField代替NSTextField。许多类具有相同的功能,可以通过更改类名轻松移植,但大多数需要一些修改,但通常不会太复杂。

Cocoa和Cocoa Touch的Foundation框架之间也存在一些差异,最常见的是缺少某些类,例如,Cocoa具有NSHost而Cocoa Touch没有。

您将了解更多有关两者之间微妙差别的信息,很快便能本能地知道哪些内容可以在iPhone上轻松/无需修改运行,哪些需要一些工作才能进行移植,但这并不难。


103
还有一个区别:Cocoa用于Mac开发,Cocoa Touch用于iOS开发。如果某个东西只在Cocoa中,你就不能在iOS上使用它;如果某个东西只在Cocoa Touch中,你就不能在Mac OS X上使用它。 - Peter Hosey
11
彼得,你应该把这个变成答案。 - user4951
1
@JimThio 这不是Peter的问题。应该由Alexandru标记为已回答。 - Jasarien
3
Peter,你应该把这个变成“一个”答案。对不起,是我的错误。Jasa的回答很好。Peter更直接地指出了真正的问题所在。他至少应该得到点赞。 - user4951

42

应用框架
i) Cocoa是Mac OS X的应用框架。
ii) Cocoa Touch是iPhone和iPod Touch的应用框架。

框架
i) Cocoa:Foundation和AppKit。
ii) Cocoa Touch:Foundation和UIKit。

某些类的缺失
Cocoa有NSHost,而Cocoa Touch没有。

API
i) Cocoa:在Cocoa中使用的所有类都带有NS前缀,例如:NSTextField。
ii) Cocoa Touch:在Cocoa Touch中使用的类都带有UI前缀,例如:UITextField。

MVC模式
i) Cocoa:除了MVC之外,Cocoa还有多种替代设计模式。
ii) Cocoa Touch:iPhone SDK有一个加强版的MVC系统,比Cocoa中的默认MVC表现更好。

其他区别
应用程序生命周期、沙箱化和内存占用也存在差异。

链接:
http://teks.co.in/site/blog/cocoa-vs-cocoa-touch-beginners-guide/ http://iphonenativeapp.blogspot.in/2011/02/difference-between-cocoacocoa-touch-and.html https://iphonecodecenter.wordpress.com/tag/difference-between-cocoa-cocoa-touch/


2
您可能想要为您在此处概述的来源命名:http://teks.co.in/site/blog/cocoa-vs-cocoa-touch-beginners-guide/. - Martijn Pieters

7
iPhone OS技术概述中的从Cocoa Touch迁移部分提供了一个很好的概述,其中还附带有每个层次的具体文档链接。
最大的差别在于UI层。Mac上使用AppKit框架,而iPhone上则是UIKit。更小的差异在Foundation框架中(以上文档中有链接)。

1
链接已经失效了...不过这也是七年前的事情了。 - Zuzlx
1
两周前我买了一台苹果电脑,现在我只是在试图找出这些可爱的名字都是什么意思。所以目前唯一有用的建议是:“别点击链接,它已经损坏了”(虽然请再给我几个星期的时间)。 - Zuzlx

5

关于 Swift 中的 import

在 Mac OSX 应用程序中使用 import Cocoa 与以下代码相同:

import AppKit
import CoreData
import Foundation

在 iOS 中我们无法import CocoaTouch


2
问题询问的是框架之间的区别,而不是哪些框架可以在哪里导入。 - Noah Gilmore
1
Foundation已经是AppKit的一部分了,因此无需单独导入。 - Nilanshu Jaiswal

2

Cocoa 对比 Cocoa Touch -

Cocoa - 用于 Mac OSX 的应用程序框架,

Cocoa Touch - 用于 iPhone 和 iPod touch 的应用程序框架。

Cocoa - Foundation + AppKit 框架,
Cocoa Touch - Foundation + UIKIT 框架。


2

1) Cocoa包括Foundation和AppKit框架,用于开发在OS X上运行的应用程序。

2) Cocoa Touch包括Foundation和UIKit框架,用于开发在iOS上运行的应用程序。


0

Cocoa

NeXTSTEP -> Cocoa -> Swift Standard Library

[Swift标准库]

Cocoa是iOS和OS X的应用程序环境

应用程序环境是一组:

  • 开发者工具:Xcode、性能分析、命令行工具、开发语言(Objective-C)
  • 运行时系统:Objective-C 运行时[关于]
  • 核心库/框架
    • OS X:Foundation、AppKit、Core Data
    • iOS:Foundation、UIKit、Core Data

应用程序环境包括:

  • OS X:Carbon、Cocoa
  • iOS:仅有 Cocoa

Cocoa TouchiOS层,其中包含一组支持iOS应用的库/框架。例如 - UIKit、MapKit...

*通常Cocoa被认为只是一组核心库/框架

Cocoa框架是一个包含NSObject的后代类的框架,可以在Objective-C运行时[关于]下运行

具有Cocoa API的框架 - 与Cocoa框架一起工作并支持Cocoa惯例的次级框架


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接