可可还是Objective-C?

4th*_*ace 8 iphone cocoa cocoa-touch objective-c

关于iPhone开发,你现在如何使用Cocoa与纯Objective-C对象.例如,以下是Objective-C:

  • 的NSTimer
  • 的NSString
  • int,float
  • NSMutableArray里

但这些是可可:

  • 的UILabel
  • 的UIColor(?)
  • 的UIView

并且要清楚,是吗

Cocoa Touch == iPhone开发

Cocoa == Mac OS X开发

dre*_*lax 41

你有点不对劲.

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.

#import <objc/Object.h>
Run Code Online (Sandbox Code Playgroud)

  • sebnow:Objective-C运行时库libobjc确实定义了一个Object类.它在<objc/Object.h>中声明. (11认同)

seb*_*now 9

正如已经指出的那样,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规范.该移植对象编译器尚未这样做的另一种方式.由于苹果的Objective-C的主要用户,而且它控制着可可,它认为是事实上的Objective-C实现.

  • 我不确定你是什么意思.Objective-C是C的超集,Cocoa/Cocoa Touch是Objective-C之上的框架.我想这是C> Objective-C> Cocoa/Cocoa Touch. (2认同)