您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
Objective-C语法上有什么优点吗?
语言,的话,优点Objective-C语法上有什么优点吗?
发布时间:2020-12-06加入收藏来源:互联网点击:
问题补充: 本人没有实际用过Objective-C,只是读过一些教程。但是作为一个实际工作中学习使用过JS、Java、C++、ActionScript、Ruby等语言的人看来,Objective-C不止是丑陋,简直是无法忍受的丑陋。它真的有任何的优点吗?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
既然Objective-C被许多开发者使用,必然也是有其优点和可取之处的。Objective-C,通常被称为ObjC,是一种面向对象的编程语言。它主要在Mac OS X和GNUstep(基于OpenStep标准的两个环境)上使用,并且是NeXTSTEP和OPENSTEP中使用的主要语言。
优点:
1、ObjC是一种非常“实用”的语言。它使用一个用C编写的精简运行时,对应用程序的大小几乎没有增加。相比之下,现在大多数OO系统都使用大型VM运行时来接管整个系统。用ObjC编写的程序往往不比其代码和库的大小大很多(通常不必包含在软件发行版中),而Smalltalk系统则需要大量的内存打开一个窗口。
2、该语言是在现有C编译器(首先作为预处理器,然后作为GCC模块)之上而不是作为新的编译器实现的。这使ObjC可以利用现有的大量C代码,库,工具和思想。可以轻松地将现有的C库(甚至在目标代码库中)包装在ObjC包装器中,为它们提供OO样式,并更轻松地在程序中使用它们。
其他特性
实际上,ObjC包含一个功能清单,这些功能在其他语言中,或者根本不存在。这些是由Cox(以及后来的NeXT)意识到的,编程远远超出了语言。该系统必须具有整体可用性和灵活性,才能在现实环境中工作。
所有库都是动态链接的。这意味着大型的Objective-C程序实际上很小,因为该库已经在机器上了。也许今天很常见,但这是从1980年代初开始的,当时动态链接还很少。可以在一个文件中提供多个版本的库。应用程序可以选择使用特定版本(4.3.2),最新版本(恰好是5.2.1)或甚至是特定主要版本的最新版本(从4.x开始的任何版本)。直到今天,诸如此类的版本控制问题仍困扰着其他系统,包括Java和组件对象模型。可以在一个库中以多种对象格式为不同平台提供代码。这样可以完全避免使用虚拟机。典型的多平台Objective-C程序比其他系统上的大多数单平台程序小。缺点:
1、Objective-C的第一个版本不支持垃圾回收。当时这是一个辩论的问题,许多人认为漫长的“死角”是在Smalltalk进行收集以使整个系统无法使用时进行的。ObjC通过不包含此功能来避免了该问题。但是回想起来,这是一个严重的疏忽。尽管一些第三方已添加了此功能(最著名的是GNUStep),但它仍在标准之外。
2、ObjC没有命名空间机制。相反,程序员被迫在其类名中添加前缀,这充其量是一个糟糕的解决方案。在ObjC下添加名称空间系统将是简单而自然的(它们在其中清晰地映射到库系统),因此这没有发生是有些令人惊讶的。
3、与某些其他面向对象的编程语言(例如C ++)不同, Objective-C不支持运算符重载。
4、Objective-C只允许一个对象从一个类继承(禁止多重继承),但是可以看出这简化了继承结构,从而有助于调试。
5、由于该语言基于C编译器,因此它仍然高度依赖源文件才能正常工作。这在大多数现代语言(例如Java或C#)中不再需要。
回答于 2019-09-11 08:43:50
OC确实有很多缺点,比如不安全, 其他的Java JavaScript swift 等都只有一个文件,他却又.h 和.m两个文件, 语法相对来说比较怪异, 底层算是c的结构体,c++指针,我个人觉得比Java和JavaScript要复杂一些,优点的话,也说不上就是有类似运行时,kvo,还是arc? 其实这些其他语言也有,所以不能成为什么优点,不过相对swift来说,他的优点可能就是编译速度快了,其他的也说不上。
回答于 2019-09-11 08:43:50
优点嘛,找个最流行的语言做对比吧,就java了
兼容C语言,不用像java一样写JNI的中间代码,这在调用一些C/CPP的库时优势极为明显支持ARC和MRC,自从引入ARC之后,一直在弱化指针的概念,学习难度降低不少,且ARC效率要比GC高;将属性声明和实现分开,看起来更清晰,这个我觉得挺好的,java的话属性和方法一般写在一个文件里,代码多了,看起来很复杂的样子;函数表达很清楚,不知道为什么OC的函数名和参数都很长,苹果官方的demo也是这样,不过看起来意思倒是很容易懂,java和一些早期的c语言喜欢用一些缩写的名字,有时候不知道什么意思;OC协议中定义的方法可以不强制实现,java的interface里定义的方法必须实现,新的java版本貌似已经改了?自带分类,这个我觉得比写一堆继承要好,用好了能省好多代码;支持block语法,java最近貌似也支持了lambda,但是以前要写回调,很烦因为支持C语言的关系,所以也支持宏定义,一些重复的code,你要是懒的话,直接定义成宏,copy过去就完事了支持无符号数,NSUInteger还是很实用的,java这点很不好,如果对端传过来一个无符号数,java必须要用一个更大的数据类型去包裹,否则显示的是负数更易用的线程模型,单说NSOperation和java的Thread类哪个更好说不清楚,但是直接写的话,GCD要比new完之后还要start的Thread要好用的多;更易用的数据结构,这个不跟java比了,因为都好用,但是比C++的vector好用多了绘图和音视频处理时更方便,java的awt和swing就是屎,处理多媒体基本不用java,OC调quartz core和AVFoundation简直不要太爽更易用的扩展库,苹果在做OSX的时候就已经写好了很多第三方库,后来直接移植到iOS上,java素来以库多而著称,但是库的质量参差不齐,相比之下还是苹果官方的库更有保证别的一时半会想不起来就不写了,无意歧视java,下次你问OC语法上有什么缺点,我就把java的优点讲出来,毕竟两者都是我喜欢的语言,
上一篇:潜叶蛾危害的幼树怎么处理?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |