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

技术手册>更多

  • 移动ALM学习指导

    移动应用生命周期管理(ALM)是一个流程,是一套实践,是针对智能手机和平板电脑进行的计划、编码、测试和部署应用。现在移动不仅仅只是简单的生产力工具,它正在向业务策略看齐。因此,组织也迅速地向员工们提供了高端的移动应用,从而交付不同来源的数据和服务。这就给软件团队提出了双重难题。同时他们又承受着快速交付的压力。他还要努力解决在生命周期各个阶段提出的一些移动ALM挑战。本手册概述了移动ALM的挑战,并且探索了不同的方法,使软件开发人员得以处理那些挑战。

  • SOA环游地球之旅 八大精彩案例集锦

    世界之大, SOA IN ACTION。放眼全球,面向服架构已经开始了较为广泛的应用,我们搜集了相关的精彩案例,在此与读者分享,一起关注SOA的发展动向以及其业务价值。让我们开始这段SOA环球之旅。

  • SOA生命周期

    服务生命周期管理是SOA治理向SOA及SOA服务的实际构建中的一个应用。然而,治理属于业务涉众,管理是技术人员(负责“实现”的团队)的权限。服务生命周期管理必然与SOA治理紧密结合,因为在软件交付的每个步骤(从业务分析人员到架构师到开发人员到测试人员,再到操作)上,确认了将要构建的内容结合了企业的明确业务需求是关键的。 

  • 面向服务架构SOA与相关技术

    面向服务的体系结构(service-oriented architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。 

    这种具有中立的接口定义(没有强制绑定到特定的实现上)的特征称为服务之间的松耦合。松耦合系统的好处有两点,一点是它的灵活性,另一点是,当组成整个应用程序的每个服务的内部结构和实现逐渐地发生改变时,它能够继续存在。

TechTarget

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