Xcode、Cocoa、Objective-C 和Swift的关系

Xcode、Cocoa和Objective-C和Swift 的关系


Xcode:

就是iOS的集成开发环境IDE,相当于Windows下的Visual Studio。Xcode的功能及其强大,甚至可以认为超过Visual Studio。当前的Xcode集成开发环境支持两种开发语言:Objective-c和Swift(Xcode 6开始支持),目前最新的Xcode支持一些AI构建。可见其发展目标和方向,它是iOS和Mac的唯一主流开发环境。

Cocoa:

  Cocoa是一大堆函数库,就好像MFC、.NET、Swing这类玩意,人家已经写好了一堆现成的函数之类的东西,你只要知道怎么用就可以了。    

   Cocoa是苹果公司为Mac OS X所创建的原生面向对象的API,是Mac OSX上五大API之一(其它四个是Carbon、POSIX、X11和Java)。

苹果的面向对象开发框架,用来生成 Mac OS X 的应用程序。主要的开发语言为 Objective-c, 它是c 的超集。 Cocoa 开始于1989年9月上市的NeXTSTEP 1.0,当时没有Foundation框架,只有动态运行库, 称为 kit, 最重要的是AppKit. 1993 年 NeXTSTEP 3.1 被移植到了 Intel, Sparc, HP 的平台上,Foundation 首次被加入,同时Sun 和 NeXT 合作开发OpenStep 也可以运行在Windows 系统上VCV。
Cocoa 应用程序一般在苹果公司的开发工具Xcode(前身为Project Builder)和Interface Builder上用Objective-C写成。不过,通过Java bridge、PasCocoa、PyObjC、CamelBones以及RubyCocoa等桥接技术,Java、Clozure CL、LispWorks、Object Pascal、Python、Perl、Ruby等其它工具或者语言也可以用来开发 Cocoa 应用。也有一些其它语言的Cocoa实现无须桥接,比如苹果公司开发的MacRuby和类似Lisp的Nu语言。不使用Xcode和Interface Builder,仅仅通过文本编辑器、GCC和GNU make工具也可以用Objective-C语言开发Cocoa应用。
对最终用户来说,使用Cocoa编程环境开发的应用程序即为Cocoa 应用。这类应用有独特的外观,因为Cocoa编程环境让程序在多方面自动遵循苹果公司的人机界面守则。
Cocoa的主要框架
Xcode、Cocoa、Objective-C 和Swift的关系_第1张图片
    Cocoa包含两个主要的Objective-C对象库,称为“框架Framework”。框架的功能类似于动态库,即可以在运行时动态的载入应用程序的地址空间,但框架作为一个捆绑 (计算机)而非独立文件,其中除了可执行代码外,也包含了资源,头文件和文档。
 1) “Foundation工具包”,或简称为“Foundation”,首先出现在OpenStep中。在Mac OS X中,它是基于Core Foundation的。作为通用的面向对象的函数库,Foundation提供了字符串,数值的管理,容器及其枚举,分布式计算,事件循环,以及一些其它的与图形用户界面没有直接关系的功能。其中用于类和常数的“NS”前缀来自于Cocoa的来源,NeXTSTEP。它可以在Mac OS X和iOS中使用。
2)“应用程序工具包”,或称AppKit(Application Kit)是直接衍生自NeXTSTEP的AppKit的。它包含了程序与图形用户界面交互所需的代码。它是基于Foundation建立的,也使用“NS”前缀。它只能在Mac OS X中使用。
“用户界面工具包”,或称UIKit(User Interface Kit),是用于iOS的图形用户界面工具包。与AppKit不同,它使用“UI”的前缀。

Objective-C
   
 iOS开发用的编程语言不是c,c++,java 而是Objective-c。虽然很多地方与c/c++相似,却也有很多地方与其不一样。如果分不清楚Objective-c 与 cocoa 的关系,大致可以这样去想: Objective-c 只是一个单纯的语言,而cocoa则是用Objective-c写成的iOS 的Objective-c的基础类库与框架。如果把Objective-c比作c++, 那么cocoa 就好比Visual Studio 的MFC。

Objective-c它主要用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。
GCC与Clang含Objective-C的编译器,Objective-C可以在GCC以及Clang运作的系统上编译。
Objective-C是编写以下应用的利器:
  • iOS操作系统
  • iOS应用程序
  • Mac OS X操作系统
  • Mac OSX 上的应用程序

问题一:我在程序中看到大量的减号、中括号和NS****这种东西,他们是什么玩意儿?

1 减号-(或者加号+)

    减号表示一个函数、或者方法、或者消息的开始,怎么说都行。

     比如c#中,一个方法的写法可能是:

    private void hello(bool ishello)

   {

     //OOXX

    }


    用Objective-C写出来就是

   -(void) hello:(BOOL)ishello

    {

       //OOXX

    }

     不过在Objective-C里面没有public和private的概念,你可以认为全是public。

而用加号+的意思就是其他函数可以直接调用这个类中的这个函数,而不用创建这个类的实例加号表示静态的成员函数。  

2 中括号[]

    中括号可以认为是如何调用你刚才写的这个方法,通常在Objective-C里说“消息”。中括号[]在 object c 中表示方法调用

比如C#里你可以这么写:

this.hello(true);

在Objective-C里,就要写成:

[self hello:YES]; //OC 的self相当于this,就是本类


3 NS****

    老乔当年被人挤兑出苹果,自立门户的时候做了个公司叫做NextStep,里面这一整套开发包很是让一些科学家们喜欢,而现在Mac OS用的就是NextStep这一套函数库。

     这些开发NextStep的人们比较自恋地把函数库里面所有的类都用NextStep的缩写打头命名,也就是NS****了。比较常见的比如:

NSLog

NSString

NSInteger

NSURL

NSImage

我们会经常看到一些教学里面会用到:

NSLog (@"%d",myInt); 

这句话主要是在console里面跟踪使用,你会在console里面看到myInt的值(在Xcode里面运行的时候打开dbg窗口即可看到)。而我们在其他开发环境里面可能会比较习惯使用MessageBox这种方式进行调试。

我们还可以看到其他名字打头的一些类,比如CF、CA、CG、UI等等,比如

CFStringTokenizer 这是个分词的东东。

CALayer 这表示Core Animation的层。

CGPoint 这表示一个点。

UIImage 这表示iPhone里面的图片。


CF说的是Core Foundation,CA说的是Core AnimationCG说的是Core GraphicsUI说的是iPhone的User Interface……还有很多别的,有待发掘了。


#import、@interface这类玩意说的是什么?

#import

 可以把它认为是#include,一样的。但是最好用#import,记住这个就行了。

 @interface等等

比如你在c#中写一个抓孩子类的定义:

 public class Kids : System

{

private string kidName=”mykid”;

private string kidAge=“15”;

private bool isCaughtKid()

{

return true;

}

}

 

当然,上面的写法不一定对,就是个用于看语法的举例。 

在Objective-C里就得这么写: 

 先写一个kids.h文件定义这个类:

@interface Kids: NSObject 

{

 NSString *kidName;

 NSString *kidAge;

 }

 -(BOOL) isCaughtKid;

@end

再写一个kids.m文件实现:

#import “kids.h”

@implementation Kids

-(void) init {

kidName=@”mykid”;

kidAge=@”15”;

}


-(BOOL) isCaughtKid

{

 return YES; 

}

 @end 

这个写法也不一定对,主要是看看语法就行了。

你可能感兴趣的:(Xcode、Cocoa、Objective-C 和Swift的关系)