为什么Objective-C很难学?
语法
先说什么是编程语言。所谓编程语言,就是一种人们能够读懂的程序代码。一门编程语言通常包含一系列内容:语法(语句编写和声明的规则)和语义(旨在实现某些任务,有效地组合语句和声明)。
大多数(通常)编程语言在方法调用上与C语言相似,访问类的成员采用。语法。(即c中的结构)。虽然这些语言一般都有自己定义类的方式(Java和C#或C++还是有很大区别的),但是语言的很多细节还是非常相似的。每当人们接触到一门新的编程语言,如果它的语法看起来很熟悉,就会让学习者感到非常舒服。像大多数人都有C语法的背景,所以如果你想学习一门C语法的语言,你的第一印象会很亲切。
单从语法的角度来看,Objective-C是独一无二的。它的语法太特殊了,很多人都没有耐心去钻研它的语义,和C++、Java等语言一样。
Python和Ruby等所谓的“奇怪”语言更容易使用,因为它们可以通过。语法。而且人们通常可以很快习惯缩进而不是花括号。
当我向别人介绍Objective-C的时候,一般来说,我会把它和一种OOP(面向对象编程)语言进行比较。
为什么objective-c难学1
到目前为止,还可以。可能他们之前就知道lisp,所以理解这个语法并不难。
为什么objective-c难学2
对这句话,人们普遍难以接受,情况变得不那么乐观了。
为什么objective-c难学3
这句话可以直接让人崩溃。
那些冒号是什么?太吓人了!然后一堆问题冒了出来:方法怎么叫?是通过表演还是其他方式?如何重载方法?
你知道,我们不是在讨论方法,我们是在讨论消息(我不会讨论它们之间的区别)和选择器,就像上面提到的performation:有两个参数。但是,大家都懒得去理解。
Objective-C是C的超集,它其实是一种非常酷的编程语言,但是由于它自身的特点,与其他现代编程语言相比,人们会认为Objective-C非常古老。Objectivec-C作为C的超集,在C的基础上扩展了一系列非常规特性,只是增加了Objective-C的复杂度。
Objective-C是一种大型语言。这个定义的出发点是它的语法非常复杂。其实苹果一直在加大力度瘦身Objective-C,比如虽然很慢,但终于完成了从头文件到标准C风格的过渡。而且苹果对Objective-C做了很多改进,增加了很多新功能,让Objective-C的代码更加简洁,比如:
综合性能
通过访问getter/setter。语法。
垃圾收集(垃圾收集)
区块(封闭)
自动参考计数
弱引用(弱引用)
所以,虽然语言变得越来越庞大,但是开发和编写代码的复杂度却降低了。
运行时间
Objective-C动态运行,仅仅从与C的渊源来看可能没有那么直观,因为不需要直接写汇编代码,所以C语言本身就是一种低改动的语言。由于Objective-C是C的超集,我们很容易倾向于Objective-C的稳定性,但实际上Objective-C是一种动态灵活的语言。Objective-C支持函数currying和反射机制,可以在运行时动态地添加或删除类的方法。
除非你之前接触过类似Objectivec-C的特性的编程语言,比如Ruby或者Lisp,否则暂时很难适应Objectivec。但是不用担心!有些事情,表面上看起来神秘可怕,其实本质上并没有那么复杂。
结构
使用Objective-C构建app,完全离不开Cocoa/Cocoa Touch框架。就像用Ruby开发web应用离不开Rails一样。
经过多年的发展,可可已经变得很重了。然而,正如上文所述,苹果正在逐渐为常规iOS开发所依赖的Cocoa Touch框架减肥,以降低其复杂性。即便如此,即使要开发的app极其简单,要学的东西还是很多,比如苹果的官方文档和各种曝光的头文件都是很好的学习资源。以UIView中的contentStretch属性为例。头文件的定义和描述如下:
@ property(nonatomic)CGRect content stretch _ _ OSX _可用_首发(__MAC_NA,_ _ IPHONE _ 3 _ 0);
//可制作动画。默认为单位矩形{{0,0} {1,1}}
这到底是什么意思?根据我的理解,这个属性是用来描述可扩展区域的大小的。但是如何实现呢?这个区域是指矩形吗?也许你永远都不会去处理这个属性,但是如果你在开发过程中的某个时间、某个场景,利用这个属性就可以轻松解决你的问题,你当时会知道它的存在并正确使用吗?
Cocoa/Cocoa-Touch是一个巨大的框架。要真正驾驭它,熟能生巧。但是这个熟悉的过程,往往让很多新手望而却步。
历史
长期以来,苹果一直在推进Objective-C语言的开发体系。Objective-C运行时、Cocoa/Cocoa Touch框架、Objective-C编译器等一系列更高层次设计的重叠,使得Objective-C不仅仅是一门语言。
为什么objective-c难学4
所以在学习Objective-C的时候,不应该孤立地学习语言,一些框架,它的运行机制或者编译器,而是要把它们融合起来。比如Objective-C集成的ARC(自动引用计数)机制,现在涉及到了语义层(不需要显示和调用dealloc),编译器层(很明显),以及Cocoa/Cocoa Touch框架的命名约定。
与上面提到的Objective-C的一些列密切相关的设计是它的独特之处。其他语言或多或少会依赖其他语言或平台运行,比如基于的Iron Python。net,Clojure这种不是Java而是依赖JVM的,甚至Ruby和Rails其实都有自己相对独立的实体和项目。唯一知名的由Cocoa/Cocoa Touch和Objective-C运行时支持的Mac Ruby后来被苹果叫停,随后得到支持。
Objective-C以及相关框架、运行时、编译器等等几乎对其他开发者社区关闭。
将来的
从目前掌握的信息来看,苹果在过去的四年里一直在努力降低Objective-C语言的复杂度。取消了手动内存管理和C标准头文件,引入了更符合当前编程语言趋势的ARC机制,以及通过getter/setter方法访问属性。语法都是为了降低Objective-C的学习成本,但即便如此,Objective-C仍然是有一定学习门槛的开发语言,它的流行完全是基于Objective-C的流行iOS应用带来的。