Objective-C最令人深恶痛绝的九大特性

日期:2014-6-10来源:IT168

Objective-C   JavaScript   Java   

苹果可能是有史以来运营最为成功的企业之一。乔布斯也是一位当之无愧的草根英雄。iPhone与iPad是技术与美感的高度融合,而为iOS系统开发应用也成为众多开发者的重要生财之道——当然,前提是大家幸运地通过了App Store的审核并在浩如烟海的软件中得到了消费者们的关注。不过这一切积极因素仍无法掩盖整套体系中的负面状况。在种种令人恼火的苹果开发生态系统经历当中,最无法忍受的就是利用Objective-C进行编程——快来吧,Swift,我们需要你!在今天的文章中,我们将一同探讨Objective-C是依靠哪九大特性搞到天怒人怨的。

实在有点太过特异

Objective-C中的字母“C”代表的就是C语言,这一点与“JavaScript”中的“Java”完全不同。无论是指针、整数还是括号,所有表达方式都与C非常相近。但二者之间的共同点也就仅限于此了。

Objective-C的拥护者们坚持认为Objective-C属于C语言的一种规则严格的超集:如果大家能够在C语言中实现某些功能,那么也应该可以在Objective-C中加以重现——不过反过来却未必奏效。因此大家可能需要考虑,“我到底应该使用Objective-C方法进行描述,还是选择C语言?”实现对C程序的可移植性需要我们以审慎的态度进行深入考量。

除此之外,对于这样一种超集而言,所有声明几乎都需要以排列方式进行。再以后缀为例:C代码保存为文件后扩展名为.c,而Objective-C文件的扩展名则为.m。

它仍然基本上属于传统的C语言

大家基本上不可能在Objective-C中获得太多来自面向对象的优越特性。总体而言,Objective-C更多地是一种针对大型系统的代码组织方式,而非编写优质代码的方式。我们仍然需要负责处理指针、仍然需要负责追踪内存。C语言程序员们喜欢把这些软件称为“可移植汇编代码”,而这一点对于Objective-C也同样适用……当然,大家只能把这些代码从Mac移植到iPad当中。

充斥着八十年代风格

灯笼裤、爆炸头、电影《早餐俱乐部》——再加上NeXT设备:Objective-C就像是编程语言世界中的一部时光机器,把我们带回上世纪八十年代那段疯狂的岁月。粗犷的风格构成了Objective-C的一切。最初出现在Lisp中的垃圾收集机制可谓绝妙的想法,Java早在多年之前就已经将其纳入自身,但Objective-C直到2006年才对其敞开怀抱。iOS甚至直到现在还没有获得垃圾收集机制,因为没人希望iPhone因此遭遇卡顿。好吧,至少Objective-C还没老旧到Pascal或者Ada那种程度。

标点符号

炫酷的现代技术青年已经能够通过编写Python、Ruby以及CoffeeScript代码构建起价值数十亿美元的企业,但他们不需要跟括号、中括号以及大括号打交道。但在编写Objective-C代码时,我们却被迫使用着几乎所有标点符号。冒号、“@”符号乃至星号,好像没有哪种符号是Objective-C用不到的。

复古的语法风格

Objective-C的语法跟可口可乐拥有诸多相似之处:它们都曾在上世纪九十年代试图推进其现代化进展,但却始终未能成功。因此大家可以直接忽略苹果在1997年着力推荐的所谓简洁“现代”语法。我们更倾向于使用“经典”语法,正如大家更青睐可口可乐的经典瓶罐一样。平心而论,苹果当初作出的努力其实值得赞赏,其中摒弃了额外的标点符号,而且能在无需解析的前提下让内容更易于阅读。但如今这些成果已经被彻底遗忘在历史的垃圾堆中,再也无人问津。

缺乏命名空间

Java拥有命名空间,但Objective-C却没有。不过大家可以通过在名称之前添加大量前缀来构建自己的命名空间,这是完全可行的。需要注意的是,不要使用“NS”前缀,因为这会与苹果的命名空间发生冲突。作为NeXTstep的组成部分,苹果的命名空间倒是始终拥有旺盛的生命力。

只能运行在苹果自己的宇宙当中

被迫每天驾驶保时捷当然不是什么坏事,但生活仍然需要多样性作为重要调剂。更重要的是,iPhone并不是世界的中心、我们不可能完全以它为中心规划生活与工作。如果大家选择在Windows或者Linux业务环境工作,那么请忘掉所有与Objective-C相关的扩展知识——理由很简单,这些技能完全无用武之地。

可移植性的价值不容忽视。苹果(以及iPhone用户)最值得庆幸的一点在于,苹果的产品真的非常出色——它们非常强大,足以吸引人们利用Objective-C重新编写自己的现有软件方案,只有这样开发者才能最大程度把自己成果运行在无数消费者手中的设备上。

(备注:通过对gcc、Cygwin以及GNUStep的深度组合,大家也有机会在其它环境中使用Objective-C,但要完成这项任务各位需要内心坚强、毅力拔群。)

我们惟一的选择就是Xcode

尽管还不至于像毛泽东之于新中国以及亨利?福特之于福特公司那么夸张,但在Objective-C的世界中,大家真的只有一种选择。为什么你非要与众不同呢,同志?

公平地讲,目前市场上已经出现了一些开源堆栈,但大家使用这类方案的频率要远远低于Xcode。

苹果的“独裁统治”

如果领导者能为产品线带来美好的发展前景,那么独裁统治倒是不一定算坏事。毕竟苹果这位暴君拥有出众的品位以及卓越的产品设计方案,在这方面苹果甚至比其它所有同业企业加起来还要强大。不过对于追求自由的人们来说,苹果仍然是阻碍大家实现理想的最大难关。

想要发出超过一百份自己开发的iPhone应用副本?赶紧打消这个念头。想要在用户界面中加入一些“不同的想法”?请回去认真阅读苹果提供的用户界面设计指南。我们根本不能在无视苹果许可的前提下作出任何变通,因为苹果利用强大的加密机制将一切牢牢锁定——并通过残酷的专制政策为其加上第二道保险。

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

评论
查看更多评论

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

Eclipse>更多

  • 从Web开发到交付:2015必备深度前端知识

    过去这几十年,互联网已被证明是影响技术世界的最复杂最难以预测的系统之一。软件往往是基于部署在本地硬件(或至少本地网络)上的假设来进行设计的。

  • 基于Node.js的API框架:LoopBack 2.0发布

    LoopBack是一个基于Node.js、开源的API框架,可以使基于Node.js的应用与各种移动设备通过API进行互联。

  • Molecule:自食其力的免费HTML5游戏框架

    Molecule是专为游戏开发爱好者构建的一个HTML5框架,兼容所有主流浏览器,且在移动设备方面也有着很大的优化。目前最轻量级以及高效的HTML5游戏引擎之一,而且完全免费。

  • 开源是怎样修炼成的?

    开源的不仅仅只是一个软件许可证。如果你相信GitHub,那么你就会明白一个协同软件开发的成功范例是什么样子了。

相关推荐

  • 连接API:如何将iOS和JSON框架集成

    连接API和设备的标准格式是使用JSON结构的包。JSON框架是JavaScript模型,适用于创建结构化数据的数据包。还有其他格式——OData、SOAP、XML,但是JSON是其中的领导者。

  • 内存数据网格提供商一头扎进Java

    10年的时间里,应用性能解决方案提供商Alachisoft一直在用NCache(针对N-Tier和网格计算.NET应用的内存计算和数据网格产品)为.NET社区服务。

  • JDK 8u40更新:新增功能抢先看

    俗话说长江后浪推前浪,一代新人换旧人,Java更新版本交替,也是这样一个道理。甲骨文又给Java添加了哪些新功能。

  • 前无古人后无来者的Java平台

    开发人员一直在致力于保持Java的活力,经过20年后,我们感觉从来没有更好的、更令人激动的时刻如同Java社区一样。

技术手册>更多

  • 企业架构师工具包

    企业架构师如何创建一个有用的工具集呢?目前实践者正在将UML和TOGAF以及其他工具连同使用,从而能够构建出软件模型解决业务构想变成工作系统最重要的一步。但是需要高度熟练的架构师,来创造业务架构参考模型。成功的软件架构师会发现和企业匹配的工作参考模型会成为他们自定制添加“工具”的框架。下面专家的一些建议可以为我们提供一些引导。

  • 敏捷开发技巧指南

    敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。关于瀑布方法和敏捷方法的分析已经探讨过多次,但瀑布方法在某些项目和开发团队中还存在价值。《敏捷宣言》声明指出,个人和交互高于流程和工具。由于开发项目的利益攸关者已经变得越来越分散,遍布在全球各地,甚至经常横跨了几个时区,基于云的开发环境已成为必备之选而非锦上添花。TT SOA在这本技术手册中将介绍敏捷开发的一些技巧以及瀑布方法和敏捷方法的对比,同时还涵盖了云对于敏捷开发所起到的作用。

  • SOA数据集成学习指南

    Web服务发展初期,人们的目光都集中在应用集成和工作流程上。标准如SOAP、WSDL、UDDI和BPEL创建和企业服务总线(ESB)成为一个能够进行这种类型集成的新的技术。

  • SOA测试全面指导

    在SOA环境中,测试团队超越了传统的以应用程序为中心的功能和性能测试。SOA需要整合地测试界面和服务,这些界面和服务有助于组合利用不同的系统、平台以及相关安全标准。要测试这些应用程序时,就提出了独特挑战。那么如何应对这些挑战呢?下面我们来具体看一下。

TechTarget

最新资源
  • 安全
  • 存储
  • CIO
  • 数据库
  • 服务器
  • 云计算