1. OC的历史
1996年12月20日,苹果公司宣布收购NeXT Software公司,NEXTSTEP/OPENSTEP环境成为苹果操作系统主要发行版本OSX的基础。这个版本的开发环境被苹果公司成为Cocoa。(NextSTEP更名为Cocoa)
垃圾收集机制(GarbageCollection)只支持OSX系统。
OC是C语言的一个扩展集,几乎所有OS X或iOS平台上的所有应用程序都是使用该语言开发的。苹果公司提供了工具包,有Cocoa(针对OSX系统)和CocoaTouch(针对iOS系统)。
OC和Cocoa是苹果公司OSX和iOS操作系统的核心,早在20世纪80年代就已经推出。
2. xcode项目与文件
创建项目时,CompanyIdentifier中输入你的公司或网站地址的DNS反向格式,比如com.mywebsite.
Xcode通过.m扩展名来表示文件使用的是Objective-C代码,应由Objective-C编译器处理。而C编译器处理.c文件,C++编译器处理.cpp文件。在Xcode中,所有这些编译工作默认由LLVM 处理,这个编译器能够理解C语言的全部三个变体。Objective-C刚诞生的时候,扩展名.m代表message, 它指的是Objective-C的一个主要特性-消息传递机制,我们一般称之为.m文件。
与C语言一样,Objetive-C使用头文件包含结构体、符号常量和函数原型等元素的声明。在C语言中,使用#include语句来通知编译器查询头文件中相应的定义代码。在Objective-C中,我们#import来达到相同的目的。Xcode在你编译Objective-C、C++和C程序时都会使用#import命令。#import可保证头文件只被包含一次,无论此命令在该文件中出现了多少次,即#include命令会引起重复包含,而#import命令不会。在C语言中,程序员通常使用基于#ifdef命令的方案来避免一个文件包含另一个文件而后者又包含前者的情况。而在Objective-C中,程序员使用#import命令来实现这个功能。
3. 框架的概念
框架是一种把头文件、库、图片、声音等内容聚集在一个独立单元中的集合体。苹果公司将Cocoa、Carbon、QuickTime和OpenGL等技术作为框架集来提供。Cocoa的组成部分有Foundation和ApplicationKit(也成为Appkit)框架。此外还有一套支持型框架,包含了Core Animation和Core Image, 它们为Cocoa增添了许多精彩的功能。Foundation框架处理的是用户界面之下的那些层(Layer)的特性,比如数据结构和通信机制。Cocoa的ApplicationKit框架,包含了Cocoa的许多高级特性:用户界面元素、打印、颜色和声音管理、AppleScript支持等。有时间可以阅读《Learn C on the Mac》和《Learn Cocoa on the Mac》。
每个框架都是一个重要的技术集合,通常包含数十个甚至上百个头文件。每个框架都有一个主头文件,它包含了框架内所有的头文件。通常在主头文件中使用#import,就可以访问框架内的所有功能。通过使用#import<Foundation/Foundation.h>来包含主头文件,就能获得整个集合。通过#import导入文件时,加载速度会非常快(因为Xcode使用预编译头文件(一种经过压缩的、摘要形式的头文件)来加快读取速度)。
4. 简单函数学习
NSLog()函数和printf()函数很相似,都是输出函数。与printf()一样,NSLog()接受一个字符串作为其第一个参数,该字符串中可以包含格式说明符(比如%d) , 此函数会接受与格式说明符相匹配的其他参数。printf()在输出之前会把这些参数插入到第一个字符串参数中。Objective-C是添加了一些新特性的C语言。NSLog相比printf添加了一些特性,比如时间戳、日期戳和自动附加换行符('\n')等。NSLog()本质是具有coc0a特色的printf()函数。printf()不支持NSString。
Cocoa工具包使用NS前缀来避免名称冲突(两个不同的事物使用相同标识符时会引起的错误)。一般在编码中,你可以使用姓名首字母或公司名称作为变量和函数名的前缀。
5. OC基础知识入门
5.1 NSString 字符串类型
NSString: @符号是Objective-C在标准C语言基础上添加的特性之一。@符号意味着引号内的字符串应作为Cocoa的NSString元素来处理。NSString是Cocoa中的字符串。
NSString支持的部分功能如下:
1. 可以告诉你它自身长度
2. 将自身与其他字符串相比较
3. 将自身转换成整型值或浮点值
注意:一个比较容易犯的错误就是将C语言风格的字符串(而不是NSString格式的@"字符串"元素)传递给了NSLog()。如果这样的话,编译器会出现如下警告:warning: passing arg 1 of 'NSLog' from incompatible pointer type。
大多数Cocoa元素都以非常直接的方式命名,名称就可以反映出他们所能实现的功能。例如,NSArray存放数组,NSDateFormatter帮助你可以用不同的方式来设置时间格式,NSThread提供多线程编程工具,而NSSpeechSynthesizer能够让你听到声音。备注:所以学好英语很关键。
5.2 布尔类型
Objective-C也支持布尔类型(Boolean),它指的是可以存储真值和假值的变量类型。C语言拥有布尔数据类型bool, 它具有true和false两个值。Objective-C也提供了一个相似的类型BOOL, 它具有YSE和NO两个值。这两种不同的布尔类型可以在同一个程序中共存。
注意:深度嵌套的结构常令人困惑,也不易于理解,而且往往也是bug的藏身之所。