欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Objective-C 的一些优点,Objective-C优点

来源: 开发者 投稿于  被查看 32694 次 评论:248

Objective-C 的一些优点,Objective-C优点


虽然 Objective-C 的语法是如此的与众不同,让初学者如此的不爽,但是其实它还是有很多优点的(主要是对比 JAVA)。


协议 Protocal
其实也就是接口啦,不过由于 OC 在定义 class 的时候已经用了 interface 这个名字,所以这里就叫 protocal 了。协议我觉得有两大优点:
1. 允许非正式协议:让我想起了前段时间看的 GO 语言的接口定义方式。就是说,当一个 class 并没有显式的声明某个协议的时候,只要它实现了相应的方法,那么就可以被当作相应的协议来用。
2. optional:在 JAVA 中,继承一个 interface 的时候,必须要实现其所有的方法,但是在实际使用中,很多方法都并不是必须被实现的,因此会产生很多行无用的代码。但是 oc 中允许标记协议的方法为 optional,这样的话你就只需要实现自己需要的部分就可以了。


属性(成员)的访问(getter/setter)
这点其实不是 OC 独有的,我只是想吐槽 JAVA。JAVA 里面通常是建议类的属性是不暴露出来,而通过方法来进行访问,这样的好处在于,如果需要在访问属性的时候增加某些逻辑处理非常的方便。但是,需要这种逻辑处理的时候并不多,因此,为所有的属性写 getter/setter,那简直就是增加垃圾代码。OC 的方式(C#也相同,其他的不太清楚)是在需要的时候写 getter/setter 就可以了。如果同样都实现了 getter/setter,那么两者的差别在于:
在 JAVA 中:
直接访问属性:member  = object.member; object.member = member;
通过getter/setter:member = object.getMember(); object.setMember(member);
OC 里面统一是:
member = object.member; object.member = member;
区别在于,OC 中,你只在需要的时候去实现 getter/setter 的逻辑处理,而不需要改动其他地方的代码。而 JAVA 中,如果你开始没有写 getter/setter,那么后来你需要加入处理逻辑的时候,你需要改动所有访问该属性的地方,如果你一开始就写了的话,那只是增加了大量的垃圾代码。


委托
这在C#中也有的东西。JAVA 中当然也可以实现委托模式,当然,是用接口,创建一个 listener 之类的东西。但是,其实很多时候你只是需要一个方法而已,你不需要一个 interface。虽然其并无实质差别,但是写起来就是很不爽啊。而且你还要为你的 interface 想一个的名字,而且这名字通常都不短。如果定义委托,你只需要给方法想名字就 ok 了。


Category
这东西有两点好处:
1. 可以把实现的逻辑分布到不同的文件中,减小单个类文件的大小
2. 可以根据需要,在不继承的情况下也可以对原 class 进行扩展,非常的方便
C#中也是很早就有了类似的东西(果然我还是非常喜欢C#啊)。


NSDictionary
这东西也值得说一下。JAVA 中的集合类型,都要求集中中的数据是同一种类型(当然你也可以把集合声明为 Object  集合……)。NSDictionary 中不要求数据是同一类型,这样的话,用起来就会非常的灵活。


小小的总结一下:设计编程语言的时候,在考虑功能强大的同时,适当的加入语法糖也是非常有必要的,因为语法糖可以极大的简化代码,代码行数变少了以后,很多问题都可以避免掉。其实要说的话,目前我可能最喜欢的还是C#,可惜微软不给力啊。JAVA 虽然有很多让我不爽的问题,但其实还是瑕不掩瑜的,只是 JAVA 的进步确实太慢了一点,而且一些比较基础的东西其实是很难改进的。

相关文章

    暂无相关文章

用户评论