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 的进步确实太慢了一点,而且一些比较基础的东西其实是很难改进的。

时间: 2024-12-18 19:10:32

Objective-C 的一些优点的相关文章

Objective—C语言的新魅力——Nullability、泛型集合与类型延拓

Objective-C语言的新魅力 一.引言 在Xcode7中,iOS9的SDK已经全面兼容了Objective-C的一些新特性和新功能.这些功能都只作用于编译期,对程序的运行并没有影响,因此,它可以很好的向下进行兼容,无缝的衔接低版本的iOS系统,那么这些特性有什么样的用处呢,作为开发者,我保证你一定会爱上他们,如果你可以将这些新特性都应用于你的开发,你的开发效率和代码质量,相比之前,会有一个很大的提升. 二.Nullability检测的支持 在swift语言中,通过!和?可以将对象声明成Op

Objective-C

1.Objective-C语言特性 2.static __block const 3.Object-C的内存管理 4.RunLoop 5.iOS消息传递机制 6.iOS程序生命周期 7.MVC设计模式MVVM 8.UIView CALayer Frame 与bounds 9.根类 NSObject 10.多线程简介 11.数据持久化 12.JSON和XML HTML 自定义报文 13.网络编程 HTTP TCP/IP Socket  ASI AFNetwork 14.AppStore上传 及远程

iOS核心语言Objective C语言 —— 内存管理

本分享是面向有意向从事iOS开发的伙伴以及苹果产品的发烧友们,或者已经从事了iOS的开发者,想进一步提升者.如果您对iOS开发有极高的兴趣,可以与我一起探讨iOS开发,一起学习,共同进步.如果您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列,然后在开始Objective C语言的学习,如果您遇到问题也可以与我探讨,另外将无偿分享自己整理出来的大概400G iOS学习视频及学习资料,都是干货哦!可以新浪微博私信?关注极客James,期待与您的共同学习和探讨!!由于时间有限,每天在

推荐系统中常用算法 以及优点缺点对比

推荐系统中常用算法 以及优点缺点对比 在 推荐系统简介中,我们给出了推荐系统的一般框架.很明显,推荐方法是整个推荐系统中最核心.最关键的部分,很大程度上决定了推荐系统性能的优劣.目前,主要的推荐方法包括:基于内容推荐.协同过滤推荐.基于关联规则推荐.基于效用推荐.基于知识推荐和组合推荐. 一.基于内容推荐 基于内容的推荐(Content-based Recommendation)是信息过滤技术的延续与发展,它是建立在项目的内容信息上作出推荐的,而不需要依据用户对项目的评价意见,更多地需要用机 器

索引的优点

索引可以让服务器跨苏的定位到指定的位置.但是这病不是索引的唯一作用,到目前位置都可以看到,根据创建索引的数据结构不同,索引也有一些其他的附加作用. 最常见的是B-Tree索引,按照属性存储的数据,所以MySQL 可以用来做ORDER BY 和GROUP BY 操作.因为数据是有序的,所以B-Tree也就会将相关的列值存储在一起.最后,因为索引中存储了实际的列值,所以某些查询值使用索引就能够完成全部查询.据此特性,总结下来索引有如下三个优点: 1 索引大大减少了服务器要扫描的数据量. 2 索引可以

各组件的优点

Redis的优点 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)支持丰富数据类型,支持string,list,set,sorted set,hash支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

C# - 继承的优点与缺点

优点 减少代码冗余 提供代码重用 减少代码量以及提高代码可读性 代码易于管理以及可划分父类和子类 通过子类重写父类的功能可支持代码扩展 缺点 子类继承父类使两个类紧密耦合,如果修改父类代码,将影响所有继承其的子类 在继承结构中,很多数据成员仍然没有被使用,分配给他们的内存没有被利用:因此,如果你没有正确地使用继承,将影响你的程序性能

C语言有什么优点什么缺点?有什么特别之处?

优点 1. 简洁紧凑.灵活方便 C语言一共只有32个关键字,9种控制语句,程序书写形式自由,主要用小写字母表示.它把高级语言的基本结构和语句与低级语言的实用性结合起来. C 语言可以像汇编语言一样对位.字节和地址进行操作,而这三者是计算机最基本的工作单元. 2. 运算符丰富 C语言的运算符包含的范围很广泛,共有34种运算符.C语言把括号.赋值.强制类型转换等都作为运算符处理.从而使C语言的运算类型极其丰富,表达式类型多样化.灵活使用各种运算符可以实现在其它高级语言中难以实现的运算. 3. 数据结

C++ vs Objective C

oc Short list of some of the major differences: C++ allows multiple inheritance, Objective-C doesn't.一个允许多继承,一个不允许Unlike C++, Objective-C allows method parameters to be named and the method signature includes only the names and types of the parameter

Objective-c——多线程开发第一天(pthread/NSThread)

一.为什么要使用多线程? 1.循环模拟耗时任务 1.同步执行 2.异步执行 (香烟编程小秘书) 3.进程 系统中正在运行的一个应用程序 每个进程之间是独立的, 均运行在其专用的且受保护的内存空间 通过活动监视器,可以查看mac系统中的开启进程 (外挂修改游戏进程中的数据,外挂用c汇编等底层) 4.线程 1个进程由一个或多个线程组成 是进程的基本执行单元(至少一个线程) 多线程: 1个进程可开启多个线程,多个线程可以“同时”执行不同任务 进程-公司,线程- 员工:老板:主线程 多线程可以提高程序的