C# · 12月 20, 2021

Objective-C中C语言使用初步学习

最近在进行iOS的深入学习,看过一些博客后意识到自己的代码写的过于臃肿。我从开始学习到现在的业务熟练都是使用的最基本的MVC模式,于是MVC中的C–controller代码十分臃肿,让接手代码的人无从下手。在网上查阅多篇博客后,才了解到有多种设计模式,虽然各有缺点,但是能让我借鉴到许多方法;然后还找到很多模块,比如YYKit等,可以优化、简化复杂的代码模块和逻辑。

现在我就在学习YYKit,发现其中使用了大量的C语言。C语言众所周知可以优化性能,所以我首先YYKit中学习C语言的使用。

isa与Meta-class

大部分内容还是从其它博客中学习到的,把其中的知识点圈出来记录下来。

每一个OC对象都有一个隐藏的数据结构,这个数据结构是OC对象的第一个成员变量——isa指针。

isa是什么呢?官方介绍是这样的:

Every object is connected to the run-time system through itsisa instance variable,inherited from the NSObject class.isa identifies the object’s class; it points to a structurethat’s compiled from the class deFinition. Through isa,anobject can find whatever information it needs at run timesuch asits place in the inheritance hierarchy,the size and structure ofits instance variables,and the location of the methodimplementations it can perform in response to messages.

类的实例对象的 isa 指向它的类;类的 isa 指向该类的 Metaclass;

类的 super_class 指向其父类,如果该类为根类则值为 NULL;

Metaclass 的 isa 指向根 Metaclass,如果该 Metaclass 是根 Metaclass则指向自身;

Metaclass 的 super_class 指向父 Metaclass,如果该 Metaclass 是根 Metaclass则指向该 Metaclass 对应的类;

Object-C 为每个类的定义生成两个 objc_class ,一个普通的 class,另一个即Metaclass。我们可以在运行期创建这两个 objc_class 数据结构,然后使用 objc_addClass将 class注册到运行时系统中,以此实现动态地创建一个新的类。

再深入的学习在下一篇博客给出。