面向对象的程序设计(OOP,Object Oriented Programming)是一种计算是一种计算机编程范式, 它将对象作为问题空间的基本元素, 利用对象和对象之间的相互作用来设计程序。
什么是面向对象?
对象的概念:即将所有事物都当对象来看待,比如我的手机,他有屏幕尺寸,重量,名字等等属性,他有打电话,发短信等等行为。当然,他的屏幕尺寸也可以当一个对象来看待。
类的概念:类,就是对具有相同特性的对象抽象的描述。比如手机,我的iPhone6对象和你的iPhoneX对象都是iPhone。iPhone就是一个类。对象的抽象是类,类的实例是对象。
元类:OC具有元类的概念,这算一个特性了。我们说过,万事万物都可以当对象来处理,对象的抽象化描述-类也能当做对象来看待。元类,就是对类的抽象。元类的实例对象就是类。
struct objc_class {
Class isa;
Class super_class;
const char *name;
long version;
long info;
long instance_size;
struct objc_ivar_list *ivars;
struct objc_method_list **methodLists;
struct objc_cache *cache;
struct objc_protocol_list *protocols;
} OBJC2_UNAVAILABLE;
这就是元类的结构体定义。相信如果你研究过runtime的C实现,应该不陌生了。
想想看,假如有一个手机类。我们修改元类的方法,将拨打电话的功能与发短信的功能交换,会不会很有乐趣。
其实这也就是runtime中的swizzle技术了。
如果你的项目需要大规模的改动某些函数实现。试试这些黑魔法吧。但是我们暂时不做讨论。等博客更新到runtime这章,再来好好学习一遍。