5.6,Class类型
到目前为止,我们已经知道了对应于方法的SEL数据类型,和SEL同样在Objective-C里面我们不仅仅可以使用对应于方法的SEL,对于类在Objective-C也为我们准备了类似的机制,Class类型。当一个类被正确的编译过后,在这个编译成功的类里面,存在一个变量用于保存这个类的信息。我们可以通过一个普通的字符串取得 这个Class,也可以通过我们生成的对象取得这个Class。Class被成功取得之后,我们可以把这个Class当作一个已经定义好的类来使用它。这样的机制允许我们在程序执行的过程当中,可以Class来得到对象的类,也可以在程序执行的阶段动态的生成一个在编译阶段无法确定的一个对象。
因为Class里面保存了一个类的所有信息,当然,我们也可以取得一个类的超类。关于Class类型,具体的使用格式如下:
1 Class 变量名 = [类或者对象 class];
2 Class 变量名 = [类或者对象 superclass];
3 Class 变量名 = NSClassFromString(方法名字的字符串);
4 NSString *变量名 = NSStringFromClass(Class参数);
第一行代码,是通过向一个类或者对象发送class消息来获得这个类或者对象的Class变量。
第二行代码,是通过向一个类或者对象发送superclass消息来获得这个类或者对象的超类的Class变量。
第三行代码,是通过调用NSClassFromString函数,并且把一个字符串作为参数来取得Class变量。这个在我们使用配置文件决定执行的时候的类的时候,NSClassFromString给我们带来了极大的方便。
第四行代码,是NSClassFromString的反向函数NSStringFromClass,通过一个Class类型作为变量取得一个类的名字。
当我们在程序里面通过使用上面的第一,二或者第三行代码成功的取得一个Class类型的变量,比如说我们把这个变量名字命名为myClass,那么我们在以后的代码种可以把myClass当作一个我们已经定义好的类来使用,当然我们可以把这个变量作为参数传递到其他的方法当中让其他的方法动态的生成我们需要的对象。
分享到:
相关推荐
第1部分 Objective-C语言 第2章 Objective-C程序设计 2.1 编译并运行程序 2.1.1 使用Xcode 2.1.2 使用Terminal 2.2 解释第一个程序 2.3 显示变量的值 2.4 小结 2.5 练习 第3章 类、对象和方法 3.1 到底什么是对象 ...
第 1 章,也就是本章 第 2 章,从 Hello,World!...第 5 章,Class 类型,选择器 Selector 以及函数指针 第 6 章,NSObject 的奥秘 第 7 章,对象的初始化以及实例变量的作用域 第 8 章,类方法以及私有方法
用于获取 Objective-C 类的所有实例变量及其对应类型的代码(使用 Objective-C 运行时) 它还支持超级类用法要运行示例项目, pod install克隆 repo,然后从 Example 目录运行pod install 。安装ClassProperty 可...
【课程内容】包含Objective-C语言的基本数据类型,基础语法以及进阶知识。同时还讲解了流程控制、字符串、集合类型、函数和闭包等。此外、面向对象、结构体、类Class,以及手动内存管理、自动内存管理、协议与抽象...
在Objective-C类上效果很好 ...和Swift类型 男人 dsdump(1) BSD General Commands Manual dsdump(1) NAME dsdump -- An improved nm + objc/swift class-dump SYNOPSIS dsdump [option...] DESCRIPTION ...
[CI状态]( Lusinyan / CommonUtilsAds.svg?style = flat)]( Lusinyan / CommonUtilsAds) 用法 要运行示例项目,请克隆存储库,然后首先从Example目录运行pod install 。 步骤1 Storyboard/programmatically: ...
它与Objective-C相比有什么优势? 2. Swift中的可选类型(Optional)是什么?为什么在Swift中引入可选类型? 3. Swift中的结构体(Struct)和类(Class)有什么区别?在什么情况下适合使用结构体而不是类? 4. 什么...
前言 id:是一种数据类型; id类型被定义为指向对象的指针,这...Objective-C中的id这种数据类型存在的价值是什么? id是一种通用的对象类型,她可以用类存储属于任何类的对象,可以理解为万能指针 ***在id的定义
班级风采iOS 9项目演示了如何读取触摸事件,包括3D Touch和Apple Pencil... 触摸屏幕上的手指或手写笔,查看以下属性动态更新: x和y位置(常规和精确) 3D力度(如果可用) 触摸类型(手指,Apple Pencil或间接触摸)
FYJsonObject将json字符串解析出来的dictionary自动解析为对应的.../* * object-c的collection比如说NSArray和NSDictionary没有类型信息, 可通过实现这个函数指明类型信息 */- (Class)clsWithCollectionProperyNa
第5 章 Objective-C 相关的iOS逆向理论基础 94 5.1 tweak 的作用原理 94 5.1.1 Objective-C 语言的特性 94 5.1.2 MobileSubstrate 96 5.2 tweak 的编写套路 97 5.2.1 灵感的来源 98 5.2.2 分析文件,...
第5章 Objective-C相关的iOS逆向理论基础 119 5.1 tweak在Objective-C中的工作方式 119 5.2 tweak 的编写套路 121 5.2.1 寻找灵感 121 5.2.2 定位目标文件 123 5.2.3 定位目标函数 127 5.2.4 测试函数功能 ...
使用自定义手势在项目中开打log输出控制面板 运行项目,在屏幕上左右来回...Class 配置打印log的类 Contains 配置log中包含的字符 ###log输出控制面板 筛选打印log的类名效果图 打印log的类名与log类型一起筛选效果图
class_getName()函数返回的是一个char类型的指针,也就是C语言的字符串类型,所以我们要将其转换成NSString类型,然后在返回出去。 NSString *className = [GCRuntimeKit fetchClassName:[Test class]]; NSLog(@...
mogenerator -m ManagedMappingObject.xcdatamodeld -O CoreDataModels \ --base-class ManagedMappingObject \ --template-var arc=true 目标NSManagedObject类必须是ManagedMappingObject子类。 目标...
弃用不推荐使用此库,而推荐使用iOS 12 图层类型AngleGradientLayer AngleGradientLayer是角度梯度的CALayer实现。正在安装pod 'AngleGradientLayer' , '~> 1.0'[快速]在您的代码中使用import ...
2.3.2 Objective-C与C++的混合编译 41 2.4 引擎的启点 42 2.4.1 应用程序入口 43 2.4.2 引擎应用入口 44 2.5 丰富的示例程序 46 2.5.1 TestCpp示例项目 46 2.5.2 脚本示例项目 47 2.5.3 MoonWarriors示例项目 47 2.6...
Ivar *var = class_copyIvarList([UIGestureRecognizer class], &count); unsigned int count = 0; for (int i = 0; i < count; i ++) { Ivar _var = *(var + i); NSLog(@"%s",ivar_getTypeEncoding(_var)); ...