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社区一样。

技术手册>更多

  • 云集成实践基础教程

    随着面向服务和基于云的架构脱颖而出,IT部门越来越重视良好的集成设计。为了避免过快的云应用集成的潜在危险,需要精心策划架构。随着应用集成需要更多的灵活性和普遍的可适用性,优化设计比以往便得更加重要。在即将到来的云计算应用集成中,以集成为中心的云计算,像iPaaS,显示了云应用者数量的快速增长,未来也将面临着更加复杂的集成和实际挑战。在这本技术手册中,我们将重点关注云集成实践。

  • SOA数据治理与管理指南

    在现今包围SOA的所有诉求和术语中,对团体而言,最寻常的仍是寻求如何将面向服务架构集成到他们的IT框架中,以避免他们设计中的数据整合、处理、管理等相关问题。他们开始学着与SOA并存,然而,他们经常发现与其他系统的协同工作、解决方案引起了令人觉得好奇的问题。本专题为企业架构师和开发人员提供了SOA数据治理与管理的基本知识和最佳做法。

  • SOA与REST混合使用指南

    大多数应用架构师都意识到,如果应用合适,开发实践反映了双方的目标和好处的话,在某些情况下,将表述性状态转移(REST)与SOA结合起来是有可能且有优势的。最大的问题是目标是否要开发一个自始至终的RESTful接口,同时满足大部分SOA目标,或者混合使用REST和SOA。

  • REST结构全面解析手册

    REST (Representational State Transfer)是代表状态传输的缩写。它代表了分布式超媒体系统的体系结构风格,该风格是Roy Field在他的论文中定义的。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。REST提出了一些设计概念和准则。本手册将为您作出详细讲解。

TechTarget

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