谈谈Objective-C

AskMHX 发布于 2017-09-09 16:00:00 2      1

最近一直在想,我到底应该学习多少个语言,从工作到现在,实际写过c,php,ruby,java,objective-c,swift,golang,python,javascript,actionscript,c#等等,但实际写过最多的是java和objective-c,其他的只能说比较业余,每个语言都有自己独特的地方,我准备写些文章谈谈这些语言对我的帮助,以及我自己的一些想法。

Objective-C的gcd,kvo,kvc,当然最牛的还是arc,虽然并不能保证没有内存问题,但确实少了一些后期像java一样分析dump的烦恼。前段时间又看了一下java无gc方面的文章 ,觉得有点意思。确实,我最近看了一下jvm规范和jls规范,jvm中确实把很多功能都交给了具体的实现,而且从过去的seril gc到现在的g1确实进步很大,这让我很惊叹,从工程学上来讲,用合适的gc可以减少开发的成本,对整体推进很有帮忙,但我依然是一个不太喜欢gc的人。使用arc也并没有增多太多的工作,但却可以不用gc。

kvc:刚开始接触时觉得有点类似xpath,或者Ongl表达式一下,很方便的可以进行对象的属性访问,而不用像java一样要通过get/set,或者说把java的反射做的如此的简单?这个其实和Objc的class内存模型有关系,我有点记不太清了,好像是有一个类似属性数组和一个方法数组在内存中,每次可以通过这个拿到。

kvo:有点类似swift中的will set,很明显这个观察者是可以做类似reactive模式的编程的,亲生的。。。

gcd:在java的coding当中,我们写多线程,就thread,runable,thread pool,task神马的,需要调度或者顺序执行时或者几个顺序+几个并行时,操作就比较复杂了。但gcd就牛B了,可以让你很简单的完成a,b顺序,ab并行+c顺序,另外gcd是支持闭包,某种语义上可以很简单的方式写多线程。

Objc的语法很多人看起来也很奇怪,从来没有见过这么长的方法,但实际使用起来会发现特别的明了[[Axx alloc]initWith:xx child:yy];这种可以让你不也需要api docs就知道这些参数就是干嘛的。

之前花了很多的精力了解语文的runtime,Class,isa,gcd,但并没有能完全理解其中的魅力,很长时间没有写过Objc了,但我始终对这个语言有敬畏之心,有精力时我会继续深入了解这个语言。

当然当你接触了Swift之后,你会想忘记Objc的,因为Swift才是未来。