应用场景:笔者在开发时遇到的一个问题,就是用户登录时,一般会有很多用户信息,所以我在本地创建了一个userManager的单例,用来存储用户信息,当用户注销时,因为userManeger是单例,如果把单例置空的话,会导致后面用不了,所以我只能把单例的属性一个个置空,所以我就想到,能不能利用咱们强大的运行时,把类里所有的属性置空。
其实代码很简单,重要的是能运用到运行时,增强自己的知识。
先导入运行时所用到的头文件:
#import <objc/message.h>//需要用到发送消息的时候,设置函数的时候
#import <objc/runtime.h>//里面有一些特殊的函数
unsigned int ivarsCnt = 0;
// 获取类成员变量列表,ivarsCnt为类成员数量
Ivar *ivars = class_copyIvarList([USUserManager class], &ivarsCnt);
// 遍历成员变量列表,其中每个变量都是Ivar类型的结构
for (int i = 0; i < ivarsCnt; i++) {
Ivar ivar = ivars[i];
object_setIvar([USUserManager sharedUserManager], ivar, nil);
}
其中
object_setIvar([USUserManager sharedUserManager], ivar, nil);的具体意思是什么呢?看下图: