前面我们已经学习了对象相关内容, 如元类,根元类,以及superclass的结构与关系等;初步分析了类的结构superclass,cache,class_data_bits_t,class_data_bits_t结构体中提供了data()方法,用于获取class_rw_t,class_rw_t是在类初始化过程中已经被创建了,并且class_rw_t的相关数据来自MachO文件中ro数据!简单总结:
转载
2024-08-22 21:22:13
74阅读
1.准备工作我们要研究类,所以首先肯定要需要定义几个类,这里我们就定义两个类,并且他们之间最好有继承关系,方便后续探索。继承自NSObject的YSHPerson类 继承自YSHPerson的YSHStudent类 在main.m文件中定义两个对象 2.元类什么是元类?以类作为其实例的类。元类的定义和创建都是由编译器完成的。对象的isa指向类,而类其实也是一个对
转载
2023-11-10 23:27:31
140阅读
iOS 类对象和元类在 Objective-C 和 Swift 中的用法是我们在开发中经常面临的一个方面。理解它们不仅可以提高我们对语言的使用理解,还可以增强我们在面向对象编程中的能力。最近我们在开发中遇到了与 iOS 类对象和元类相关的问题,以下是这个过程的详细复盘记录。
### 问题背景
在最近的一次项目迭代中,团队发现某些功能模块出现异常,用户反馈应用程序时常崩溃,导致用户流失。该问题阻碍
1.exec1 exec(source, globals=None, locals=None, /)
2 Execute the given source in the context of globals and locals.
3
4 The source may be a string representing one or more Python statemen
转载
2023-07-17 11:29:48
101阅读
在Swift中能够表示 “任意” 这个概念的除了 Any 和 AnyObject 以外,还有一个AnyClass。我们能够使用AnyClass协议作为任意类型实例的具体类型。AnyClass在Swift中被所定义:
[javascript]
view plain
copy
转载
2024-03-13 18:17:36
28阅读
实例对象(id)实例对象是我们对类对象alloc或者new操作时所创建的,在这个过程中会拷贝实例所属类的成员变量,但并不拷贝类定义的方法。/// Represents an instance of a class.
struct objc_object {
Class _Nonnull isa OBJC_ISA_AVAILABILITY;
};
/// A pointer to an
转载
2023-09-01 18:11:04
43阅读
文章目录类的定义元类的定义元类的类既然元类是个类,和之前的类一样也是一个对象,那元类的类是什么呢?三者的关系 类的定义类在OC中其实是一个指向objc_class的结构体指针,结构体的构造为:typedef struct objc_class *Class;
struct objc_class {
Class isa;
Class super_class;
转载
2023-07-20 21:32:59
97阅读
苹果统一把消息接收者作为对象。所以,这是说,类也是对象。也就是说,OC中所有的类都是一种对象:由一个类实例化来的对象叫实例对象,这好理解,那么,类作为对象(称之为类对象),又是什么类的对象?当然也容易猜到,就是今天要学习的内容——元类(Metaclass)。定义元类就是类对象所属的类。所以,实例对象是类的实例,类作为对象又是元类的实例。已经说了,OC中所有的类都一种对象,所以元类也是对象,那么元类
转载
2023-11-03 08:20:26
79阅读
# iOS 获取元类对象的基础教程
在iOS开发中,有时我们需要获取元类(metaclass)对象来进行更深入的反射或动态特性处理。对于一位刚入行的小白来说,了解这一概念和实现方式是非常重要的。本文将逐步引导你如何在iOS中获取元类对象,并且提供详细的代码示例。
## 流程概述
在获取元类对象时,整个流程可以分为以下几个步骤:
| 步骤 | 操作
原创
2024-09-20 04:54:05
26阅读
一、Object(objc实例对象),Class(类),Metaclass(元类),Rootclass(根类),Rootclass‘s metaclass(根元类)要理解iOS中的isa指针,我们就离不开Objective-C中类的几种数据结构;在Objective-C的类型结构中,Object(实例),Class(类),Metaclass(元类),Rootclass(根类),Rootclass‘
转载
2023-08-27 23:15:50
155阅读
理解类与对象的本质对于掌握一门语言是至关重要的,本文将从结构类型的角度探讨OC的类对象、实例对象、元类对象(Meta Class)。我们先看一张图: iOS类、实例、元类关系图.jpg每个 Class 都有一个 isa 指针指向一个唯一的 Meta Class每一个 Meta Class 的 isa 指针都指向最上层的 Meta Class,即 NSObject 的 Meta
转载
2023-07-25 21:18:26
95阅读
文章目录前言1.1 类和对象的关系2.1 类的结构体2.2 对象的结构体2.2.1 元类2.2.2 涉及消息转发机制2.2.3 元类也有类2.3.4 对象和Class的 isa指针 前言在OC中,有对象objc,有类Class,有父类SuperClass,其实还有一种元类MetaClass。在接下来的RunLoop,消息转发机制的学习之前需要知道OC类和对象的底层,所以理解类, 父类,元类的关系
转载
2023-08-21 09:36:47
53阅读
友元的目的就是让一个函数或者类,访问另一个类中私有成员。友元的关键字:friend。友元的三种实现:1.全局函数做友元。2.类做友元。3.成员函数做友元。全局函数做友元:例子:friend void goodgay(Building* building);void goodgay(Building* building)是全局函数。
原创
2023-08-24 11:10:52
61阅读
1.元类型元类型是指所有类型的类型,包括类、结构体、枚举和协议。 类、结构体或枚举类型的元类型是相应的类型名紧跟.Type。 协议类型的元类型——并不是运行时适配该协议的具体类型——是该协议名字紧跟.Protocol。 比如,类SomeClass的元类型就是SomeClass.Type,协议SomeProtocol的元类型就是SomeProtocal.Protocol。 你可以使用后缀self表达
转载
2023-11-27 15:02:58
47阅读
一、前言 在学习反射的内容中了解到元数据的概念,在VS环境编程中对于类库定义的类通过右键“转到定义”按钮会出现一个“从元数据”的页面,页面包含类相关成员说明且不包含具体的方法和属性内容,一个类似于定义声明、说明书或者清单的内容。延着反射的内容来进一步探究元数据是什么,怎么使用,使用范围等。二、定义元数据(metadata)是关于数据的数据或者叫做用来描述数据的数据或者叫做信息的信息,类比于在C+
转载
2023-07-14 10:09:03
199阅读
一、对象的结构体typedef struct objc_object {
Class isa;
} *id;isa 指针:这个指针指向他所属的类。这个对象的isa指针指向他的类。二、类的结构体typedef struct objc_class *Class;
struct objc_class {
Class isa OBJC_ISA_AVAILABILITY;
转载
2023-05-31 11:10:34
105阅读
注:我们引用apple开源代码中objc4-750中的相关源代码定义。OC中的对象是类的实例化出来的,这个我们都能理解。可是元类是什么,元类存在的意义是什么?首先来看一下OC中关于对象的实现定义,struct objc_object {
private:
isa_t isa;
public:
// ISA() assumes this is NOT a tagged point
转载
2024-01-15 21:00:54
57阅读
看了几篇别的博客讲得绕来绕去,让人看了之后感觉似懂非懂,这里总结一下。如有不当之处请读者指出。 元类是什么众所周知Objective-C(以下简称OC)中的消息机制。消息的接收者可以是一个对象,也可以是一个类。那么这两种情况要是统一为一种情况不是更方便吗?苹果当然早就想到了,这也正是元类的用处。苹果统一把消息接收者作为对象。等等,这是说,类也是对象?yes,就是这样。就是说,OC中所有的类都一种对
转载
2023-07-23 22:08:26
11阅读
目录前言:元类type元类exec内置函数元类产生类的过程手动创建类(了解)自定义元类控制生产类的过程类实例化对象的过程代码演示:对象实例化出来的整个过程练习:定义修改属性为隐藏属性属性查找小结补充内容:元类实现单例模式 前言:既然Python中一切皆为对象,有没有想过,我们定义的类它是否也为一个对象?类本质上也是一个对象,既然类是一个对象,那么就应该有一个类来产生它。这也就是本章节讲到的主题:
转载
2024-04-11 12:36:58
99阅读
1.Runtime是什么Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时能够更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。 Objective-C(下面简称OC)是对C语言的封装,Runtime是OC在封装C时的一个产物。Runtime简单说就是一套C语言API,OC