可可粉或目标C?

问题描述 投票:8回答:4

关于iPhone的开发,现在如何使用可可与纯Objective-C对象。例如,以下是Objective-C

  • NSTimer
  • NSString
  • int,float
  • NSMutableArray

但是这些是可可粉:

  • UILabel
  • UIColor(?)
  • UIView

并且要明确,是

Cocoa Touch == iPhone开发

Cocoa == Mac OS X开发

objective-c iphone cocoa cocoa-touch
4个回答
41
投票

您错了一点。

NSTimer,NSString,NSMutableArray均为可可。 intfloat实际上是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>

9
投票

正如已经指出的,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实施。


2
投票

确实,Cocoa Touch用于iPhone开发,而“普通” Cocoa用于Mac OS X开发,但是它们并没有太大区别,并且共享大多数基本类。

在iPhone开发中,您无需担心使用的是纯粹的Objective-C还是可可粉。可可是iPhone的一等公民,如果避免的话,您将一事无成。

Objective-C与普通旧C子集之间存在细微差异。与栈分配的结构和直接函数调用相比,对象分配和方法调用具有更高的开销,但是99%的时间您也不需要关心这一点(不要尝试过早优化!)。


1
投票

关于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框架。

© www.soinside.com 2019 - 2024. All rights reserved.