由C++入门Objective-C——Objective C 的语言特性

来源:互联网 发布:淘宝标签怎么设置 编辑:程序博客网 时间:2024/05/01 04:57

Objective-C 是Mac和iPhone开发的主要语言,现在把这几天对于Objective-C 语言中的一些特性总结下。

 

OC是从C发展过来的一种语言,加入了面向对象的特性,听起来和C++颇为相似,所以,下文就把两者的一些区别讲一下,这样就可以很快从C++的基础中知道如何使用OC了。说实话,第一眼看到OC的语法,感觉相当迷茫阿。这都什么东西?没有了括号,好多中括号。。。哈哈

 

对于C的部分,两者都是基本兼容的,语法也就是C的语法,所以就不多做阐述,下面主要说明面向对象的部分。

 

 

声明一个类:
C++:
 
OC:
 
OC的声明是包含在 @interface ... @end 之间,而不是 Class  {……};
在:后面的是父类的名称,<>中间的是实现的接口。C++可以实现多重继承,OC不支持,以实现接口的方式来实现近似的关系。一般来讲,多重继承也是不推荐的。多重继承引入的其他的函数可以藉由接口实现,或者叫协议protocols更合适,是类似于虚基类。而多重继承引入的其他变量,OC是没有直接的语法实现的,也许可以通过在类中组合一个成员变量的方式带入其他的变量。
@interface标记后面紧跟的{}是声明成员变量的,里面可以带权限标志,在{}后面是声明成员函数的区域。而C++中没有这种特定的区域,分段可能很多是按照访问权限来分,然后各个访问权限里面可以声明变量,也可以声明成员函数。对于顺序,我记得是有建议先放什么,后放什么,这样可以表示这个声明的着重关系是什么。我认为这种把声明区域分开的做法还是不错的。
成员变量的声明和普通的C声明语法没有什么太大区别,就不赘述了。
下面看成员函数的声明,注意,这是成员函数的声明,不是普通函数的声明,普通函数就是C函数,所以和C函数声明语法一致。这点不一致我不知道是好是坏,让我感觉不那么统一,有些迷惑。但是两者确实也有些区别,因为成员函数其实是默认传入self指针的函数。
好,现在看一个声明的例子 -(void)func:(int)p1 other:(int)p2;
最前面的减号(-)表示的是此函数是实例函数,对应的是加号(+)表示类函数。这些函数是没有权限的,插一句,OC没有类变量。
然后(void)表示的是返回值,此为空。
后面的func和other都是函数名的一部分,在调用的时候需要使用。
:后面的部分是传入的参数(int)参数类型,p1、p2传入参数名。
所以,假如用C的语法表示这个函数就是 void funcOther( int p1, int p2);
实现部分:
C++:


O C:



OC的实现是包裹在 @implementation @end
假如你在这个段里面实现一个没有在前面声明的函数,那它就有如私有函数的存在,但只是别人不知道,想要使用的时候还是可以调用到。囧。因为OC是使用动态分发机制来实现的,不是像C++那样是一个虚函数表,在编译的时候就已经确定。
具体实现,貌似没有什么好讲的。
调用方式

C++:



Objective C:



中括号终于现身了。中括号在OC里面就好像C++里面的. 或者 -> 是表示对于实例或类的成员的调用。不过话说写这个虽然看起来层次分明,但是每每需要回头补括号。
在2.0中,加入了property这个语言特性,然后可以以类似C++的方式调用成员变量了。

 

本文并没有涉及所有的Objective-C特性,只是简单的介绍。

 

BTW. 随着学习的继续,也许还会有后文。