您的位置:首页 > 其它

OC优缺点

2015-10-12 20:32 211 查看
OC的优缺点 只是相对与其他的语言来说。

OC优点:

1.Category是非常实用的扩展机制,可以很方便的为一个已有的类添加属性或者方法,而不需要笨拙的去继承。

2.运行时多态的概念,可以让一个类的对象动态的以其他类行为去执行(OC中多了很多运行时态的机制,其中id的特殊用途,可以通过id类型的变量,调用不同类的同名函数,即使这些类没有任何关系)。

3.ARC不用多讲了吧

4.OC中类没有所谓的构造函数和析构函数,所以如果一个类中有其他类的数据(动态申请的),那么释放内存就不能依赖析构函数,但可以采用重写-(id)
free来实现类中所有数据释放。

5.OC中成员变量也有三种访问权限,@public,@protected,@private。但默认的是@protected,而C++中默认是private。

6.OC中成员函数只有两种,一种是实例函数,一种是类函数。实例函数就是C++中的Public函数,类函数就是public中的static函数。

7.OC中成员函数如果要接受多个参数,则需要每个参数前加冒号(虽然教科书上说参数后加冒号,但就我看来说成参数前加更能让C++Programmer理解)。例如-(
int ) Set : ( int ) A : ( int ) B ;每个形参前还可以加一个参数名,并成为函数名的一部分。例如-( int ) Set : ( int ) A And : ( int ) B;在使用时[ classTest Set : 10 And : 12 ]; 起初看起来确实不习惯。。。

8.OC中还多了一个id类型,通过测试,id就是指针。

9.OC不是一个过度复杂的
C 衍生语言。

10.OC可以给已类添加新的函数。@interface
classExist( NewMethodGroup )-@end,@implementation classExist( NewMethodGroup )-@end。

11.OC可以将让某类A,代替某类B。通过poseAs关键字。例如:[FractionB
poseAs: [Fraction class]];此后使用Fraction类时,就转换成使用FractionB了

12.OC还有protocol概念。protocol实际是一组函数,支持改协议的类都应重写这些函数。通过@protocol-@end来声明protocol。类中通过<protocol1,protocol2,...>来表示支持某个协议。如@interface
A : Object < NSCopying, NSTransform >-@end表明类A继承与Object类,并支持两个协议(NSCopying, NSTransform )。

13.OC最后总结,其类实现以c为基础。@interface classTest - @end是相当于一组宏,帮你将类的所有成员变量声明组织为一个结构体,成员函数实际就是普通函数,是在原来成员函数基础上,修改函数名称,添加结构体指针到第一个参数。id类型实际也就是指针。难怪OC的类看起来不像C的一般语法,原因就是其源自C的一般语法,采用新的类脚本的方式,实现的类功能。

14.由于都是C衍生出的面向对象的语言
所以可以和C++混合编码。(百度地图API 就用到了)

缺点:

1.不支持多重继承
只有多级继承。

2.使用动态运行时类型,所有的方法都是函数调用,所以很多编译时优化方法都用不到。(如内联函数等),性能低劣。

3.不支持运算符重载(“命名空间”,也称“名称空间
。VS.NET中的各种语言使用的一种代码组织的形式 通过名称空间来分类,区别不同的代码功能 同时也是VS.NET中所有类的完全名称的一部分。因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了,为了解决这个问题,引入了名字空间这个概念,通过使用 namespace
xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的冲突了。)

4.程序执行效率:汇编>C>OC
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: