Objective-C简介

通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。Objective-C可以在GCC以及Clang运作的系统上编写和编译,因为GCC与Clang含Objective-C的编译器。1980年代初布莱德·确斯(Brad Cox)在其公司Stepstone发明Objective-C。他对软件设计和编程里的真实可用度问题十分关心。Objective-C最主要的描述是他1986年出版的Object Oriented Programming: An Evolutionary Approach. Addison Wesley. ISBN 0-201-54834-8.

语言用途编辑

Objective-C用途:编写iOS操作系统(如:iPhone、iPod touch、iPad 等苹果移动终端设备 )应用程序和Mac OS X操作系统应用程序的利器。 Objective-C的流行当归功于iPhone的成功,因为Objective-C被用于编写iPhone应用程序。

语言特点编辑
 
基本特点
Objective-C是非常实际的语言。它是一个用C写成、很小的运行库,只会令应用程序的尺寸增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。Objective-C写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。因此,Objective-C它完全兼容标准C语言C++对C语言的兼容仅在于大部分语法上,而在ABI(Application Binary Interface)上,还需要使用extern "C"这种显式声明来与C函数进行兼容),而在此基础上增加了面向对象编程语言的特性以及Smalltalk消息机制。[1] 
Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,很多人考虑到Smalltalk回收时有漫长的死亡时间,令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入这个功能。
虽然Objective-C是C的超集,但它也不视C的基本型别为第一级的对象。
Objective-C同C++的异同:
和C++不同,Objective-C不支持运算子重载(它不支持ad-hoc多型)。亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。
Objective-C和C++的比较
单一继承:
Objective-C不支持多重继承,(同Java和Smalltalk),而C++语言支持多重继承。
动态:
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学派则称为了灵活可以容忍运行时多出错。
 
优缺点
Apple在其Mac OS X 10.3中仍未引入垃圾回收这个功能。不过令人欣慰的是在Apple发布的Xcode4中已经支持自动释放啦,我不敢冒昧地说那是垃圾回收,因为两者机制不同,在Xcode4中的自动释放,也就是ARC(Automatic Reference Counting)机制,是不需要用户手动去Release一个对象,而是在编译期间,编译器会自动帮你添加那些以前你经常写的[NSObject release]。
另一个问题是ObjC不包括命名空间机制(namespace mechanism)。取而代之的是程序设计师必须在其类别名称加上前缀,时常引致冲突。在2004年,在Cocoa编程环境中,所有Mac OS X类别和函式均有“NS”作为前缀,例如NSObject或NSButton来清楚分别它们属于Mac OS X核心;使用“NS”是由于这些类别的名称在NeXTSTEP开发时定下。
虽然Objective-C是C的母集,但它也不视C的基本型别为第一级的对象。
C++不同,Objective-C不支援运算子多载(它不支持ad-hoc多型)。亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。
由于Obj-C使用动态运行时类型,而且所有的方法都是函数调用(有时甚至连系统调用(syscalls)也如此),很多常见的编译时性能优化方法都不能应用于Obj-C(例如:内联函数常数传播、交互式优化、纯量取代与聚集等)。这使得Obj-C性能劣于类似的对象抽象语言(如C++)。不过Obj-C拥护者认为既然Obj-C运行时消耗较大,Obj-C本来就不应应用于C++或Java常见的底层抽象。

Objective-C(一简介)的更多相关文章

  1. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  2. ios 多线程开发(一)简介

    简介 线程是在一个程序中并发的执行代码的方法之一.虽然有一些新的技术(operations, GCD)提供了更先进高效的并发实现,OS X和iOS同时也提供了创建和维护线程的接口. 这里将要介绍线程相 ...

  3. Objective C Runtime 开发介绍

    简介 Objective c 语言尽可能的把决定从编译推迟到链接到运行时.只要可能,它就会动态的处理事情.这就意味着它不仅仅需要一个编译器,也需要一个运行时系统来执行变异好的代码.运行时系统就好像是O ...

  4. APP自动化框架LazyAndroid使用手册(1)--框架简介

    作者:cryanimal  QQ:164166060 APP自动化简介 APP自动化,即通过自动化的方式,对APP施行一系列的仿按键输入.触摸屏输入.手势输入等操作,以达到对APP的功能进行自动化测试 ...

  5. 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

    一. iOS 项目简介 1. iOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类 ...

  6. Appium简介

    Appium简介 Appium is an open source test automation framework for use with native, hybrid and mobile w ...

  7. CMarkup成员方法简介 (转)

    CMarkup成员方法简介 (转) 转自:http://blog.csdn.net/magictong/article/details/6669837翻译:magictong(童磊)2011年7月版权 ...

  8. 001.SQLServer高可用简介

    一 SQLServer高可用集群相关概念 1.1 Windows故障转移群集 Windows故障转移群集是由多个服务器组成的共同提供某高可用服务,该服务用于防止单台服务器故障导致服务失效.故障转移群集 ...

  9. python的简介与简单使用

    简介: python的诞生 创始人:Guido van Rossum(荷兰人:吉多) 时间:1989年 特点: 1.简单明了,容易上手 2.多平台,`全面发展,平衡发展, 3.胶水语言,有大量的库 其 ...

随机推荐

  1. [Effective Java]第三章 对所有对象都通用的方法

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. Linux netmask

    wget http://mirrors.sohu.com/ubuntu/pool/universe/n/netmask/netmask_2.3.12.tar.gz tar xf netmask_2.3 ...

  3. XAF应用开发教程(三)业务对象模型之引用类型与关联关系

    本节介绍信息系统开发中最常见的问题,引用关系,一对多关系,多对多关系. 以客户信息为例,客户通常需要客户分类,如VIP客户,普通客户,潜在客户.当然,我们可以定义枚举类型进行定义出这个类型,并在客户类 ...

  4. 自定义表单input

    我想实现下面这个效果?应该怎么写最方便呢?最有效,兼容性最好呢 我使用<p>标签套lable,加input的组合,p标签绝对定位,input标签铺满,用padding填充. 主要css . ...

  5. ACCESS 数据库使用配置调整解决方案

    分享到 一键分享 QQ空间 新浪微博 百度搜藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 64位服务器无法使用ac ...

  6. FFPEG 转码记录------解决了有流,但是没有码率和FPS?

    命令行:(已经测试成功) ffmpeg -i rtmp://localhost/live/S0000_8 -c:v libx264 -b:v 500k -c:a libfdk_aac -b:a 64k ...

  7. poj1673EXOCENTER OF A TRIANGLE

    链接 据说这题是垂心..数学太弱没有看出来,写了分朴实无华的代码.. 旋转三边得到图中的外顶点,然后连接三角形顶点求交点,交上WA..觉得没什么错误就去看了下discuss,发现都在说精度问题,果断开 ...

  8. poj1066Treasure Hunt(线段相交)

    链接 很纠结的找到了所有线段的中点,又很纠结的找到了哪些中点可以直接相连,最后bfs一下求出了最短路.. #include <iostream> #include<cstdio> ...

  9. new Date()时间对象

    <!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...

  10. Tomcat:IOException while loading persisted sessions: java.io.EOFException解决手记

    原文:http://blog.csdn.net/lifuxiangcaohui/article/details/37659905 一直用tomcat一段时间都正常无事,最近一次启动tomcat就发生以 ...