关于iPhone的开发,现在如何使用可可与纯Objective-C
对象。例如,以下是Objective-C
:
但是这些是可可粉:
并且要明确,是
Cocoa Touch
== iPhone开发
Cocoa
== Mac OS X开发
您错了一点。
NSTimer,NSString,NSMutableArray均为可可。 int
和float
实际上是C,但是由于Objective-C是C的严格超集,因此您可以在Objective-C代码中使用它们。
纯Objective-C仅需要链接到Objective-C运行时库,而无需链接其他框架或库。 Cocoa是一个框架,其中包含NSObject和NSString之类的内容。其他框架,例如AppKit,扩展了Cocoa框架。
纯Objective-C中的编码通常意味着从称为Object
的根对象而不是NSObject派生。诸如@implementation
,@interface
,@selector
等是C的Objective-C扩展,它们是所有Objective-C源代码中常见的(无论是否纯净)。如果要使用纯Objective-C进行编码,则除了从Object
派生的对象之外,不能使用其他任何东西。
#import <objc/Object.h>
正如已经指出的,NS *类实际上是可可,而不是Objective-C。 Objective-C是一种语言,而Cocoa是一种框架(OpenStep的实现)。可以将此框架视为C ++的“ stdlib”等效项。 UI *类是Cocoa Touch,这是为iPhone创建的另一个框架。
关于最后一个问题,是的,Cocoa Touch仅适用于iPhone。可可用于Mac OS X开发。但是,如上所述,可可是OpenStep的实现。存在可可替代品,例如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还是可可粉。可可是iPhone的一等公民,如果避免的话,您将一事无成。
Objective-C与普通旧C子集之间存在细微差异。与栈分配的结构和直接函数调用相比,对象分配和方法调用具有更高的开销,但是99%的时间您也不需要关心这一点(不要尝试过早优化!)。
关于iPhone开发,现在当您使用可可与纯Objective-C对象时该如何处理。
如果您在应用中未使用Objective-C,则所有Cocoa对象都是Objective-C对象。
[如果您使用的是Python或Ruby,则您的对象将是Python或Ruby对象。但是,只要它们从Cocoa类继承,其他Cocoa对象就可以访问它们,无论它们是否用Objective-C编写。
((有Core Foundation,它提供了在Cocoa中可以正常运行但不是用Objective-C编写的对象。这是一个实现细节;请不必担心。)
例如,以下是Objective-C:
- NSTimer
- NSString
- int,float
- NSMutableArray
仅NSTimer,NSString和NSMutableArray是Objective-C类。 int和float是基本类型,而不是类。而且它们都不来自Objective-C:int和float都来自C,NS *类都来自Cocoa。
正如我在撰写本文时sebnow所写,可可是一种框架,而Objective-C是一种语言。 NS *类全部来自Cocoa框架,而不是Objective-C语言。
但是这些是可可粉:
- UILabel
- UIColor(?)
- UIView
不,这些是可可粉。它们在可可应用程序中不可用。同样,Application Kit类在Cocoa Touch中不可用。
((可可是Foundation + AppKit;可可触摸是Foundation + UIKit。)
并且要明确,是
可可触控== iPhone开发
可可== Mac OS X开发
是。可可触摸是iPhone框架;可可是Mac框架。