ios应用开发Objective-C语言简介 |
Objective-C,通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言 。它主要 使用于Mac OS X和GNUstep这两个 使用OpenStep 标准的系统,而在NeXTSTEP和OpenStep中它更是 根本语言 。Objective-C 可以在gcc运作的系统写和编译,由于gcc含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是十分“实际”的语言 。它 使用一个用C写成、很小的运行库,只会令 利用程序的大小增加很小,和大 部分OO系统 使用极大的VM执行 工夫会取代了整个系统的运作相反 。ObjC写成的程序通常不会比其原始码大众多 。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要 使用极大的内存来开启一个窗口的状况相反 。 Objective-C的最初版本并不 支撑垃圾回收 。在当时这是 争吵的焦点之一,众多人考量到Smalltalk回收时有漫长的“死亡 工夫”,令整个系统失去 功能 。Objective-C为幸免此问题才不 占有这个 性能 。 固然某些第三方版本已加入这个 性能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入这个 性能 。 另一个问题是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只 答 应答象继承一个类别(不设多重继承) 。Categories和protocols不单 可以提供众多多重继承的 好处,并且没有众多缺陷,例如额外执行 工夫过重和二进制不兼容 。 Objective-C 排行榜 TIOBE 2010 5月编程语言榜已于近日公布,本期主要 变迁是Objective-C排名进入前十 。 只管Objective-C的份额在上个月只达到0.08%,但却在排名上迈出了主要一步——首次进入前十名 。这一步的 意思重大,要晓得,2001年6月TIOBE编程榜公布以来,总体惟独13个编程语言曾经进入前十名 。 Objective-C 风行的主要缘由可能是它是唯逐个种 可 认为iphone和ipad编程的语言 。但单从编程语言的角度来看,诞生于1986年的Object-c并没有 体现出多少新意 。 TIOBE 2010年6月份编程语言榜已于近日公布,Objective-C排名 接续 俯冲,从第10名 回升到第9名 。由此可见,Objective-C 存在很大的进展空间 。 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 看来无误的程序拿到Simualr 67那里就 无奈通过 。 从众多方面来看,C++和Objective-C的差异,与其说时技术上的, 不如说是思维 模式上的 。你是不是想更安全而舍弃灵便性?Simular67学派的 支撑者 声称既然程序设计出众何必再要灵便性,而 Smalltalk学派则辩称为了灵便 可以容忍运行时多出错 。 Objective-C 简洁教程 前言 ◆开始学习前, 假如你已经具备了一些C语言的 根底 常识,包括变量类型、函数、返回值、以及指针的 有关概念 。假如对这些还不了解, 提议首先学习谭浩强的《C程序设计》 。 ◆Objective-C,是 C 的衍生体,继承了全部 C 语言的 特点 。是有一些例外,然而它们不是继承于 C 的语言 特点 本身 。 ◆nil:在 C/C++ 你兴许曾 使用过 NULL,而在 Objective-C 中则是 nil 。不同之处是你 可以传递讯息给 nil(例如 [nil message];),这是 彻底合法的,然而你却不能对 NULL 如法炮制 。 ◆BOOL:C 没有正式的布尔类型,而在 Objective-C 中也不是「真的」有 。它是包括在 Foundation classes( 根本类别库)中(即 import NSObject.h;nil 也是包括在这个标头档内) 。BOOL 在 Objective-C 中有两种型态:YES 或 NO,而不是 TRUE 或 FALSE 。 ◆#import vs #include:就如同你在 hello world 范例中看到的,我们 使用了 #import 。#import 由 gcc 编译器 增援 。我并不 提议 使用 #include,#import 根本上跟 .h 档头尾的 #ifndef #define #endif 雷同 。许多程式员们都允许, 使用这些东西这是十分 愚昧的 。无论如何, 使用 #import 就对了 。这样不单 可以幸免麻烦,并且万一有一天 gcc 把它拿掉了,将会有足够的 Objective-C 程式员 可以 保持保留它或是将它放回来 。偷偷告诉你,Apple 在它们官方的程式码中也 使用了 #import 。所以万一有一天这种事真的 产生,不难 意料 Apple 将会提供一个 增援 #import 的 gcc 分支版本 。 ◆ Objective-C 中, method 及 message 这两个字是 可以 调换的 。不过 messages 占有特殊的 特点,具体区别在後面介绍 。 编译 hello world
◆输出 hello world ◆ 在 Objective-C 中 使用 #import 接替 #include ◆ Objective-C 的预设副档名是 .m 缔造 classe @interface ◆基于 "Programming in Objective-C," Copyright (C) 2004 by Sams Publishing 一书中的范例,并 通过允许而刊载 。
◆NSObject:NeXTStep Object 的缩写 。由于它已经改名为 OpenStep,所以这在今日已经不是那麼有 意思了 。 ◆继承(inheritance)以 Class: Parent 示意,就像上面的 Fraction: NSObject 。 ◆夹在 @interface Class: Parent { .... } 中的称为 instance variables 。 ◆没有设定存取权限(protected, public, private)时,预设的存取权限为 protected 。设定权限的 模式将在稍後 注明 。 ◆Instance methods 跟在成员变数(即 instance variables)後 。 格局为:scope (returnType) methodName: (parameter1Type) parameter1Name;scope 有class 或 instance 两种 。 ◆instance methods 以 - 开头,class level methods 以 + 开头 。 ◆Interface 以一个 @end 作为 完毕 。 原生的Hello World代码
以上是Xcode开发环境下默许的.m文件内容,便是原生的Hello World范例代码 。 对于hello world的更多 扩大内容 在 Objective-C 中 #import 和 #include 的区别 在 Objective-C 中,#import 被当成 #include 指令的改进版 原来 使用 。除此之外,#import 确定一个文 件不得不被导入一次,这使你在递归包括中不会浮现问题 。 使用哪一个还是由你来决定 。普通来说,在导入 Objective-C 头文件的时候 使用 #import,包括 C 头文件时 使用 #include 。 |