作为iOS开发人员,我们经常听到SDK,API。可是它们到底是什么?有什么作用呢?,有的人总是觉得它们太抽象了。
接下来就让我们一起谈谈,因为技术知识无穷的,所以我说的可能会有一些不准确的地方,所以也希望广大的博友提出指正,大家一起进步~~
SDK
SDK,英文全称Software Development Kit,中文意思就是软件开发包。这个开发包通常都会包含API函数库、帮助文档、使用手册、辅助工具等资源。意思就是,SDK事实上是开发所需资源的一个集合。而API也被其包含其中,这个我们下面再讲。而开发iOS项目我们一般都会用到Xcode,那么SDK与XCode又是什么关系呢?两者的关系就像操作系统和软件的关系,操作系统给应用程序提供平台,你用软件实现你想用的功能。Xcode给SDK提供平台,你用SDK来编程,Xcode只是一个IDE,用于开发的一个工具而已,你也可以不用Xcode来开发。只是它是苹果官方比较提倡的,而且相对来说最大众,最好用而已。而SDK才是开发的灵魂,也就是说你所正真要用的东西。
值得一提的是,现在直接说SDK都是代指开发Windows平台下的应用程序所使用的SDK,不过总的来说SDK的定义与作用都是差不多的。由这个我们也不难看出来,其实不管在什么操作平台下,什么编译语言。我们所用的本质规则都是一样的,同时我们也可以在从事自己的专业的时候,也借鉴一下别的领域,说不定就有意外的收货和感悟。
最后说一下,有的人之所以认为SDK难以理解,难以具体化,实例化。其实我觉得这正是SDK的广义性造成的,SDK 还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。正是因为它包含的东西多,广,深。所以SDK很难简单的,明了的定义在那里。这点大家也不要太纠结,我们以后接触的多了也就自然有了它的大致轮廓。
API
刚才说了,API是包含在SDK之中的,所以API的广义性就相对来说小一点。API这个词,全称叫Application Programming Interfaces(应用程序编程接口)。简单地说,就是一套套的要求,用来管理应用程序之间的沟通。API并不是什么新事物,在你使用PC或笔记本时,正是API让数据在程序之间传输。例如,把一个LibreOffice文档中的片断切割出来并传输到Excel表格上。系统级的API让LibreOffice这类程序能够运行在Windows这样的操作系统上。
也可以说操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作)。API是通过把程序内部的一些功能有限地向外开放来做到的,这使得应用之间可基于各自的利益分享数据,同时不需要开发者公布所有的软件代码。对开源项目来说也是如此。你可以把它看成是一扇门、窗或杠杆,不管用什么比喻,一个程序和外面的软件世界的沟通就是由API定义的。
Mac OS X上的五大API Cocoa,Carbon,POSIX,X11和Java
接下来我们说说比较重要和常用的API,Cocoa。Cocoa 应用程序一般在苹果公司的开发工具Xcode(前身为Project Builder)和Interface Builder上用Objective-C写成。不过,通过Java bridge、PasCocoa、PyObjC、CamelBones以及RubyCocoa等桥接技术,Java、Clozure CL、LispWorks、Object Pascal、Python、Perl、Ruby等其它工具或者语言也可以用来开发 Cocoa 应用
说道API,就不得不说说Cocoa Touch,Cocoa Touch由苹果公司提供的软件开发API, 用于开发 iPhone\iPod\iPad上的软件。也是苹果公司针对iPhone应用程序快速开发提供的一个类库。此库以一系列框架库的形式存在,支持开发人员使用用户界面元素构建图像化的事件驱动的应用程序。
这个大家一定都不陌生,我们开发时经常要建的类,这样一看就直观多了。
那么问题来了,Cocoa与Cocoa Touch就是一个单词的差别,有什么区别吗?
两者都包含OC运行时的两个核心框架:
Cocoa包含Foundation和AppKit框架,可用于开发Mac OS X系统的应用程序
Cocoa Touch包含Foundation和UIKit框架,可用于开发iPhone OS 系统的应用程序
Cocoa时Mac OS X的开发环境,Cocoa Touch是 Iphone OS的开发环境
现在大家明白了为什么我们经常用的Cocoa Touch比较多了吧,因为我们开发的大部分都是手机APP,所以用到Cocoa Touch也就自然了。
嘿嘿,以上就是本人对SDK与API一些浅薄的理解和总结,其中也是查了网上好多资料自己学的,看了好多大神的博客,也才有这么一点点进步,才接触博客,如果文章有什么不正确或者模糊的地方,也希望广大的博友指正出来,大家一起学习!