本节书摘来自异步社区《iOS应用开发》一书中的第2章,第2.1节Objective-C编程语言,作者【美】Richard Warren,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.1 Objective-C编程语言
iOS应用开发
Objective-C语言是一种简洁的、优雅的、对C语言进行了面向对象设计的扩展。严格意义上来说,它是C语言的超集。你可以在Objective-C项目中使用任何有效的C语言代码。这让我们除了Objective-C和C框架库以外,还可以使用大量的第三方代码库。Objective-C的大多数面向对象的语法都是从Smalltalk借鉴而来。Smalltalk是最早的面向对象语言之一,它设计得很简单,很容易被实现并且很容易学会。尽管它的历史很悠久,Smalltalk仍然还是市场上最具创新性的编程语言。很多现代的计算机编程语言仅仅是重新开发了最初在Smalltalk中使用过的技术。Objective-C也从那里吸收了很多设计:一个高度动态、极富表达力的基本组件,它是所有东西建立的基石。
作为一个动态语言,Objective-C运行时才将方法和参数绑定,而不是在编译时。你不需要知道对象的类。你可以向任何类发送任何消息。这样通常就会极大地简化代码,但是,如果你给对象发送了一个它无法理解的消息,程序运行时就会崩溃。
幸运的是,Xcode会提醒你一些没有被声明的消息。此外,你可以将对象声明为静态类型,这样编译器会对代码进行额外的分析并产生警告。Objective-C还是一种具有高度反射能力的语言,它能观察和修改自身。在运行时,我们能够检查任何类,并且能访问它的方法和变量等。我们可以修改类,通过类别(categories)或者扩展(extension)来加入自己的方法,甚至可以在运行时动态的重定义方法。
最后,Objective-C,尤其是Cocoa和Cococa Touch框架,使用了许多设计模式来减少不同部分代码的耦合性。耦合性越低的代码越容易修改和维护。修改程序的一部分不会影响代码其他的任何部分。然而,如果你不熟悉这些设计模式,它们则会让代码变得晦涩难懂。
这些设计模式包括我们在程序中使用的模型-视图-控制器(MVC)框架、用委托代替子类、使用键-值编码(KVC)用于高度动态读取对象的实例变量、键-值观察(KVO)用于监控对这些变量的任何改变,以及为应用程序提供大量通知的一个程序框架。
当掌握了Objective-C语言后,你就会发现你常常能够使用比想象中更少的代码来解决更加复杂的问题,无需像传统的程序语言那样使用那么多的代码,例如使用C++或者Java编程语言。我们能够更加仔细地定制解决方案来适应要解决的问题,而不是生搬硬套。
在设计Cocoa Touch框架和Xcode的开发工具时苹果公司都有很好地应用了Objective-C的灵活性。这些工具使得通用的任务变得易于完成,而不需要很多重复的代码,并且需要时还能在其他情况中使用。
本章后面的内容讲述了Objective-C编程语言。但这些并不代表了全部,关于Objective-C就足以写一整本书。事实上,确实有很多人写了这样的书。你有可能想要看这些书。或者阅读苹果公司的开发文档中的Objective-C编程语言。这份指南提供了你可能需要的全部细节。不同的是,本章是“内容精粹”的版本,它为我们起步提供了足够的知识,并且指出了很多关键特征和常见的错误。
虽然并不需要之前就具有面向对象编程的开发经验,但是我还是假设你们对其他类C语言的编程语言有了一个基本的了解(例如C、C++或者Java)。如果下面的例子让你感到非常困惑,你可能需要在继续之前温习一下C语言技能了。如果你可以正确地给出输出结果1,那么,就让我们继续。
#include <stdio.h>
int main (int argc, const char * argv[]) {
int total = 0;
int count = 0;
for (int y = 0; y < 10; y++) {
count++;
total += y;
}
printf("Total = %d, Count = %d, Average = %1.1f",
total,
count,
(float)total / (float)count);
return 0;
}
1正确的答案是“Total = 45,Count = 10,Average = 4.5”。如果你能编译并且运行这个程序那就更好了。