iOS成长之路基础篇 – (1) 了解 Objective-C 语言

iOS成长之路基础篇 – (1) 了解 Objective-C 语言

2014年苹果发布了新的语言Swift,同时我又是一个喜欢玩转新东西的人。也是在这个时候,我进入了iOS开发的队列,开始学习Swift,开发iOS应用,现在已经有一个App在App Store上线。然后,在过去的将近两年的时间中,我一直没有深入玩转过苹果的元老语言Objective-C(后面简称OC),但是从编程语言排行榜来看,OC虽然一直再呈下降趋势,但是毕竟经过这么多年的沉淀,很多人还是不愿意抛弃他,学习新的语言,苹果目前也还在支持,并将在未来的一段时间支持,国内外的大部分公司还是以OC开发为主。所以这一段时间我就慢慢的把OC的语言从头到尾啃了一遍,那么今天的主角就是OC基础语言总结。本文默认你已经学习过至少C语言这一门课程。
关键字

基础语言

  • 文件后缀

在C语言(又或者C++语言)编程中,我们是以.c(或者C++中使用.cpp)为后缀的是源文件和以.h文件为后缀是头文件,一般在引用某一文件时,导入头文件,其中的导入时用的是#include 等。

在OC语言中,我们的头文件也是以.h为后缀,我们的源代码文件使用.m为后缀。其中的导入时用的是#import 等。

注意:

  1. 我们可以在OC语言中混合使用C或者C++代码,包含有C语言或者C++语言时,文件的后缀使用.mm。同时一般如果是纯粹的C++文件,源代码文件后缀为.cpp,头文件使用.hpp为后缀。
  2. import和include的功能是一样的,都是将引入的文件原封不动拷贝到当前位置。import的优点:会自动防止重复拷贝,同时兼容C语言的引入。
  3. “ ”优先在当前文件路径查找, < >优先在系统环境查找。
  • 引入新的关键字

OC本来就是在C语言的基础上扩增的,那么OC就支持C语言的所有关键字,同时,OC也增加了自己的关键字。那么都有哪些呢?下面我们来看一下:

@interface @implemention @end @public @protected @private
@select @try @catch @throw @finally @optional
@required @class @property @synthesize @dynamic BOOL
Class SEL YES NO super nil
atomic nonatomic retain assign copy block
strong weak readonly readwrite id protocol

这都是OC增加的关键字,可能还有非常不常用的关键字没有包含进来,目前我已经接触过的基本都包含金来了。后面我们将会再碰到了这些关键字时,做一个对比和分析。

  • 引入新的数据类型

当然,再引入新的关键字之后,新的数据类型也就会被引入。首先,我们回忆一下C语言的数据类型

  1. 基本数据类型
  2. 构造类型
  3. 指针类型
  4. 空类型

那么,上面这些在OC中同样是支持的,下面我们看看引入的数据类型:

  1. BOOL数据类型
  2. Block数据类型
  3. id数据类型和class数据类型
  4. 特殊数据类型SEL(@Select),nil
  • 流程控制语句

C语言在流程控制这儿几乎包含了所有的条件控制语句,所以OC在流程控制方面基本没有增加什么新的内容,只是增强了for循环使用的便捷性。

引入增强for循环:for (... in ...){ /* ... */ }

  • 函数和方法

函数:一般是全局性的,属于面向过程的叫法。方法:一般是相对于对象或者类来说的,属于面向对象编程的叫法。

OC语言在方法这里的改造还是巨大的。首先,在面向对象编程中,方法分为类方法和对象方法。

类方法的定义为:+ (数据类型)方法名: (数据类型)参数

对象方法的定义为:- (数据类型)方法名: (数据类型)参数

  • 面向对象编程

C语言是面向过程的编程语言,而OC是和C++一样的面向对象编程的语言。

面向对象编程有三大属性:封装性,继承性,多态性。

同时,OC将C语言扩展成面向对象编程之后,语法上自然也就有了很大的区别,从上面的对比和新增的内容就可以看出。在面向对象编程过程中,我们将使用@property和@synthesize等关键字。而且与C++不同,OC还引入了分类(Category)的概念,可以在不修改原来类文件的情况下增加方法。还增加了协议(protocol)等。

下一篇主要介绍语法知识点。

  • 异常处理

在C语言中是没有异常处理的概念的,在OC中,苹果引入了异常处理的机制。语法格式:

@try {
// ...
}@catch (NSException *exception) {
// ...
}@finally {
// ...
}

总结

今天主要总结了OC语言在C语言基础上的扩充,我将在下一篇中总结OC面向对象编程的语言知识。OC语法确实和我们过去接触的编程语言语法跳跃很大。学习了swift,才真正感觉到swift是Apple给iOS开发者的一剂新药。况且现在Swift也已经开源了,对于iOS的发展更加有力。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注