美文网首页
[13]Effective Objective-C 2.0【1-

[13]Effective Objective-C 2.0【1-

作者: 默然走一生 | 来源:发表于2019-05-10 18:03 被阅读0次

Effective Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法

第一章 熟悉Objective-C

第一条 了解Objective-C语言的起源

Objective-C 与C++、Java等面相对象语言类似,不过很多方面有差别。Objective-C语言使用“消息结构”(messaging structure) 而非"函数调用"(function calling). Objective-C语言由Smalltakl演化而来, Smalltakl 是消息型语言的鼻祖。消息与函数调用之间的区别看上去就像这样:

//Messaging (Objective-C)
Object * obj = [Objective new];
[obj performWith:parameter1 and:parameter2];

//Function calling (C++)
Object * obj = new Object;
obj->perform(parameter1, parameter2);

关键区别在于:函数调用改的语言,在编译阶段由编译器生成一些虚方法表,在运行时从这个表找到所要执行的方法去执行。而使用了动态绑定的消息结构在运行时接到一条消息,接下来要执行什么代码是运行期决定的,而不是编译器。

第二条: 在类的文件中尽量少引用其他头文件

如果需要引用一个类文件时,只是需要使用类名,不需要知道其中细节,可以用@class xx.h,这样做的好处会减少一定的编译时间。如果是用的#import全部导入的话,会出现a.h import了b.h,当c.h 又import a.h时,把b.h也都导入了,如果只是用到类名,真的比较浪费,也不够优雅

有时候无法使用@class向前声明,比如某个类要遵循一项协议,这个协议在另外一个类中声明的,可以将协议这部分单独放在一个头文件,或者放在分类当中,以降低引用成本。

面相对象(拓展)

OOP,Object Oriented Programming,面向对象的编程,还有OOD(面向对象的设计),OOA(面向对象的分析)

  • 面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。
  • 面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们我们使用的就是面向对象了。

面向对象的三大特性:

  • 1、封装

    隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。

  • 2、继承

    提高代码复用性;继承是多态的前提。

  • 3、多态

    父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。

五大基本原则:

  • 1、单一职责原则SRP(Single Responsibility Principle)

    类的功能要单一,不能包罗万象,跟杂货铺似的。

  • 2、开放封闭原则OCP(Open-Close Principle)

    一个模块对于拓展是开放的,对于修改是封闭的,想要增加功能热烈欢迎,想要修改,哼,一万个不乐意。

  • 3、里式替换原则LSP(the Liskov Substitution Principle LSP)

    子类可以替换父类出现在父类能够出现的任何地方。

  • 4、依赖倒置原则DIP(the Dependency Inversion Principle DIP)

    高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。就是你出国要说你是中国人,而不能说你是哪个村子的。比如说中国人是抽象的,下面有具体的xx省,xx市,xx县。你要依赖的是抽象的中国人,而不是你是xx村的。

  • 5、接口分离原则ISP(the Interface Segregation Principle ISP)

    设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。就比如一个手机拥有打电话,看视频,玩游戏等功能,把这几个功能拆分成不同的接口,比在一个接口里要好的多。

感谢分享,学习:https://www.jianshu.com/p/862b064e82e0

相关文章

网友评论

      本文标题:[13]Effective Objective-C 2.0【1-

      本文链接:https://www.haomeiwen.com/subject/umczoqtx.html