日志

[Objective-C语言教程]简介(1)

 来源    2019-03-18    1  

中文名:扩充C的面向对象编程语言

外文名:Objective-C

简 写:ObjC&OC

创始人:布莱德·考克斯

创始时间:1980年代

Objective-C,通常写作ObjC或OC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。

它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。

GCC与Clang含Objective-C的编译器,Objective-C可以在GCC以及Clang运作的系统上编译。

1980年代初布莱德·考克斯(Brad Cox)在其公司Stepstone发明Objective-C。

他对软件设计和编程里的真实可用度问题十分关心。

Objective-C最主要的描述是他1986年出版的书 :

《Object Oriented Programming: An Evolutionary Approach. Addison Wesley.》 ISBN 0-201-54834-8.

1、语言用途

Objective-C是编写以下应用的利器:

iOS操作系统

iOS应用程序

Mac OS X操作系统

Mac OSX 上的应用程序

Objective-C的流行归功于iPhone的成功。编写iPhone应用程序的主要编程语言是Objective-C。

2、语言特点

Objective-C是非常实用的语言。它是一个用C写成很小的运行库,令应用程序的尺寸增加很小,

和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。

Objective-C写成的程序通常不会比其原始码大很多。

而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。

因此,Objective-C它完全兼容标准C语言(C++对C语言的兼容仅在于大部分语法上,

而在ABI(Application Binary Interface)上,

还需要使用extern "C"这种显式声明来与C函数进行兼容),

而在此基础上增加了面向对象编程语言的特性以及Smalltalk消息机制。 

Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,

很多人考虑到Smalltalk回收时有漫长的死亡时间,令整个系统失去功用。

Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep),

Apple在其Mac OS X 10.3中仍未引入这个功能。

虽然Objective-C是C的超集,但它不是C的基本类型为第一级的对象。

(1)、异同

Objective-C同C++的异同:

和C++不同,Objective-C不支持运算子重载(它不支持ad-hoc多型)。亦与C++不同,

但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。

Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,

例如额外执行时间过重和二进制不兼容。

(2)、单一继承

和Java、Smalltalk一样,Objective-C不支持多重继承,而C++语言支持多重继承。

(3)、动态

Objective-C是动态定型(dynamicaly typed),它的类库比C++容易操作。

Objective-C 在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。

C++ 跟从面向对象编程里的Simula 67(一种早期OO语言)学派,而Objecive-C属于Smalltalk学派。

在C++里,对象的静态类型决定你是否可以发送消息给它,而对Objective-C来说,由动态类型来决定。

Simula 67学派更安全,因为大部分错误可以在编译时查出。 而Smalltalk学派更灵活,

比如一些Smalltalk 看来无误的程序拿到Simualr67那里就无法通过。

从很多方面来看,C++和Objective-C的差别,与其说是技术上的, 不如说是思维方式上的。

你是否想更安全而舍弃灵活性?

Simular67学派的支持者称既然程序设计出色何必再要灵活性,而 Smalltalk学派则称为了灵活可以容忍运行时多出错。

(4)、优缺点

Apple在其Mac OS X 10.3中仍未引入垃圾回收这个功能。

不过令人欣慰的是在Apple发布的Xcode4中已经支持自动释放(不等同于严格意义上的垃圾回收,因为两者机制不同)。

在Xcode4中的自动释放,也就是ARC(Automatic Reference Counting)机制,不需要用户手动去Release一个对象,

而是在编译期间,编译器会自动帮你添加[NSObject release]。

另一个问题是Objective-C不包括命名空间机制(namespace mechanism),

取而代之的是程序设计师必须在其类别名称加上前缀,时常引起冲突。

在2004年,在Cocoa编程环境中,所有Mac OS X类和函数均有“NS”作为前缀,

例如NSObject或NSButton,以表明它们属于Mac OS X核心(使用“NS”是由于这些类和函数在NeXTSTEP开发时定下的)。

虽然Objective-C是C的超集,但它不视C的基本型为第一级的对象。

由于Objective-C使用动态运行时类型,而且所有的方法都是函数调用(有时甚至连系统调用(syscalls)也如此),

很多常见的编译时性能优化技术失效(例如:内联函数、常数传播、交互式优化、纯量取代与聚集等)。

这使得Objetive-C性能劣于类似的对象抽象语言(如C++)。

不过Objective-C拥护者认为既然Objective-C运行时消耗较大,Objective-C本来就不应应用于C++或Java常见的底层抽象。

3、难度

苹果公司一直在尝试降低Objective-C语言的复杂度--淘汰手动内存管理以及C标准头文件,

引入更符合当下编程语言潮流的ARC机制,

还有通过.语法来访问属性的getter/setter方法等等,都是为了降低Objective-C的学习难度。

即便如此,学习Objective-C仍然需要克服学习门槛。它的热度完全是由基于Objective-C编写的热门iOS应用带起来。 


Objective-C是通用语言,它是在C语言编程语言之上开发的,它增加了Small Talk编程语言的功能,

使Objective-C成为面向对象的语言。 它主要用于开发iOS和Mac OS X操作系统及其应用程序。

最初,Objective-C是由NeXT为其NeXTSTEP操作系统开发的,

之后苹果公司使用它来开发iOS和Mac OS X,并接管了Objective-C。

1. 面向对象的编程

Objective-C完全支持面向对象的编程,包括面向对象开发的四大特性 -

  • 封装
  • 数据隐藏
  • 继承
  • 多态性

示例代码

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   NSLog (@"hello world");
   [pool drain];
   return 0;
}

2. 基础框架

Foundation Framework提供了大量函数功能,如下所示。

  • 它包括一个扩展数据类型列表,如:NSArrayNSDictionaryNSSet等。
  • 它由一组丰富的函数组成,用于处理文件,字符串等。
  • 它提供了URL处理功能,日期格式化,数据处理,错误处理等实用程序。

3. 学习Objective-C

学习Objective-C时,最重要的事情是专注于概念,而不是迷失在语言技术细节中。
学习编程语言的目的是成为一个更好的程序员; 也就是说,在设计和实现新系统以及维护旧系统方面变得更加有效。

4. 使用Objective-C

如前所述,Objective-C用于开发大量的iOS和Mac OS X应用程序,它拥有大量iOS用户,并且大大增加了Mac OS X用户。 因为Apple专注于质量第一,而且对于那些开始学习Objective-C的人来说非常棒。

相关文章
C语言入门教程-(1)简介及搭建环境
日志1.谁适合阅读本教程 本教程可以帮助大家从零开始学习C语言,对于有一定基础的人起到夯实基本功的作用.C语言容易学习,非常适合初学者入门,而且也为以后的编程打下基础.借用一句话:“要进入编程行业高手必学 ...
2
python语言特点简介 以及在Windows以及Mac中安装以及配置的注意事项
日志正如前一篇随笔所提到的,python属于解释型语言 python语言有两个特点: 1.胶水语言(历史遗留问题,原来Perl语言作为Unix内置标准件,获得极大追捧,作为竞争者的python一开始是作为 ...
1
[C语言教程]十一、预处理
日志★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:为敢(WeiGanTechnologies)➤博客园地址:山青咏芝(https://www.cnblogs ...
1
[C语言教程]十、复合结构
日志★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:为敢(WeiGanTechnologies)➤博客园地址:山青咏芝(https://www.cnblogs ...
1
[C语言教程]九、指针
日志★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:为敢(WeiGanTechnologies)➤博客园地址:山青咏芝(https://www.cnblogs ...
[C语言教程]八、数组
日志★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:为敢(WeiGanTechnologies)➤博客园地址:山青咏芝(https://www.cnblogs ...
1
[C语言教程]七、函数
日志★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:为敢(WeiGanTechnologies)➤博客园地址:山青咏芝(https://www.cnblogs ...
[C语言教程]六、C语句和程序流
日志★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:为敢(WeiGanTechnologies)➤博客园地址:山青咏芝(https://www.cnblogs ...
1
[C语言教程]五、运算符和表达式
日志★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:为敢(WeiGanTechnologies)➤博客园地址:山青咏芝(https://www.cnblogs ...
[C语言教程]四、(3)scanf的用法
日志★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:为敢(WeiGanTechnologies)➤博客园地址:山青咏芝(https://www.cnblogs ...
[C语言教程]四、(1)C语言中的基本输入输出
日志★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:为敢(WeiGanTechnologies)➤博客园地址:山青咏芝(https://www.cnblogs ...
1
[C语言教程]二、(2)一个C语言程序的基本结构
日志★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:为敢(WeiGanTechnologies)➤博客园地址:山青咏芝(https://www.cnblogs ...
2
[C语言教程]三、C语言的数据类型
日志★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:为敢(WeiGanTechnologies)➤博客园地址:山青咏芝(https://www.cnblogs ...
[C语言教程]二、(1)C语言快速入门
日志★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:为敢(WeiGanTechnologies)➤博客园地址:山青咏芝(https://www.cnblogs ...
YAML 语言教程
日志编程免不了要写配置文件,怎么写配置也是一门学问. YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. 本文介绍 YAML 的语法,以 JS-YAML 的实现为例.你可以去 ...
前端测试框架Jest系列教程 -- 简介
日志系列教程:   1. 前端测试框架Jest系列教程 -- Matchers(匹配器)   2.前端测试框架Jest系列教程 -- Asynchronous(测试异步代码)   3.前端测试框架Jest ...
1
转:spring boot log4j2配置(使用log4j2.yml文件)---YAML 语言教程
日志转:spring boot log4j2配置(使用log4j2.yml文件) - CSDN博客http://blog.csdn.net/ClementAD/article/details/514988 ...
1
YAML 语言教程(转载)
日志用YAML语言读取配置是最快的,之前的suricata中用yaml读取了配置,并且在代码运行期间,对配置进行了维护,所以抽点时间,来了解一下YAML语言编程,下文虽然对YAML语言和JAVAScrip ...
2
Go 语言教程
日志Go 语言教程 Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发, ...
2
PyQT5速成教程-1 简介与环境搭建
日志本文由 沈庆阳 所有,转载请与作者取得联系! PyQt简介 一个良好的界面是人机交互中十分重要的一环. Python作为脚本语言,起初并未拥有GUI开发的部分.但随着其开放的扩展性,使得Python不 ...