[英]Cocoa or Objective-C?
关于 iPhone 开发,你现在如何使用 Cocoa 和纯Objective-C
对象。 例如,以下是Objective-C
:
但这些是可可:
需要明确的是
Cocoa Touch
== iPhone 开发
Cocoa
== Mac OS X 开发
你弄错了。
NSTimer、NSString、NSMutableArray 都是 Cocoa。 int
和float
实际上是 C,但由于 Objective-C 是 C 的严格超集,您可以在 Objective-C 代码中使用它们。
纯 Objective-C 只需要链接到 Objective-C 运行时库,不需要其他框架或库。 Cocoa 是一个包含 NSObject 和 NSString 之类的框架。 其他框架,如 AppKit,扩展了 Cocoa 框架。
在纯 Objective-C 中编码通常意味着从名为Object
而不是 NSObject 的根对象派生。 喜欢的东西@implementation
, @interface
, @selector
等是的Objective-C扩展到C和这些才是在所有的Objective-C源是共同的,纯粹与否。 如果你想用纯 Objective-C 编写代码,除了你自己的从Object
派生的Object
之外,你不能使用任何其他东西。
#import <objc/Object.h>
正如已经指出的,NS* 类实际上是 Cocoa,而不是 Objective-C。 Objective-C 是一种语言,而 Cocoa 是一种框架(OpenStep 的实现)。 这个框架可以被认为是 C++ 的“stdlib”等价物。 UI* 类是 Cocoa Touch,另一个为 iPhone 创建的框架。
关于最后一个问题,是的,Cocoa Touch 仅适用于 iPhone。 Cocoa 用于 Mac OS X 开发。 然而,如上所述,Cocoa 是一个 OpenStep 实现。 存在 Cocoa 的替代品,例如 GNUstep 和 Cocotron。 这些替代框架允许在多个平台上使用相同的代码。 OpenStep 框架不仅适用于 Mac OS X 开发,也适用于 Linux 和 Windows。
另一件需要注意的事情是其他 Objective-C 运行时是不同的。 没有单一的 Objective-C 规范。 Portable Object Compiler是实现此目的的另一种方式。 由于 Apple 是 Objective-C 的主要用户,并且它控制着 Cocoa,因此它被认为是事实上的 Objective-C 实现。
Cocoa Touch 确实用于 iPhone 开发,而“普通”Cocoa 用于 Mac OS X 开发,但它们并没有太大区别并且共享大部分基本类。
在 iPhone 开发中,您无需关心是使用纯 Objective-C 还是 Cocoa。 Cocoa 是 iPhone 上的一等公民,避免它并不会带来任何好处。
Objective-C 和普通的旧 C 子集之间略有不同。 对象分配和方法调用比堆栈分配结构和直接函数调用具有更高的开销,但 99% 的时间您也不需要关心这一点(不要试图过早地优化!)。
关于 iPhone 开发,你现在如何使用 Cocoa 和纯 Objective-C 对象。
如果你在你的应用中除了 Objective-C 之外什么都不使用,那么所有 Cocoa 对象都是 Objective-C 对象。
如果您使用 Python 或 Ruby,那么您的对象将是 Python 或 Ruby 对象。 但是只要它们继承自 Cocoa 类,其他 Cocoa 对象就可以访问它们,无论它们是否用 Objective-C 编写。
(Core Foundation 提供了在 Cocoa 中运行良好但不是用 Objective-C 编写的对象。这是一个实现细节;不用担心。)
例如,以下是Objective-C:
- 定时器
- 字符串
- 整数,浮点数
- 可变数组
只有 NSTimer、NSString 和 NSMutableArray 是 Objective-C 类。 int 和 float 是原始类型,而不是类。 它们都不是来自 Objective-C:int 和 float 来自 C,NS* 类都来自 Cocoa。
正如 sebnow 在我写这篇文章时所写的,Cocoa 是一个框架,而 Objective-C 是一种语言。 NS* 类都来自 Cocoa 框架,而不是 Objective-C 语言。
但这些是可可:
- 用户界面标签
- 界面颜色(?)
- 界面视图
不,那些是 Cocoa Touch。 它们在 Cocoa 应用程序中不可用。 同样,应用程序工具包类在 Cocoa Touch 中不可用。
(Cocoa 是 Foundation + AppKit;Cocoa Touch 是 Foundation + UIKit。)
需要明确的是
Cocoa Touch == iPhone 开发
Cocoa == Mac OS X 开发
是的。 Cocoa Touch 是 iPhone 框架; Cocoa 是 Mac 框架。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.