获取class的property属性List
1 | -(void)printPropertyList{ |
获取class的的名字
1 | -(void)printfClassName{ |
获取类的父类并输出
1 | -(void)printfClassName:(Class )clas{ |
设置类的父类
1 | /** |
对象和类的区分
1 | -(void)isMetaClass{ |
获得类所占字节的大小
1 | size_t size = class_getInstanceSize(NSClassFromString(@"UIView")); |
获得类的属性及其属性的类型
1 | -(void)ivarList{ |
这些是apple Objectice-C Runtime Reference,具体的更多的在这个网址可见。
上一篇说了一个方法 名字是void method_exchangeImplementations(Method m1, Method m2)
因为这个交换方法只能执行一次,所以解决了交换两次,就相当于没有交换了。具体代码:
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
void (^__method_swizzling)(Class, SEL, SEL) = ^(Class cls, SEL sel, SEL _sel) {
Method method = class_getInstanceMethod(cls, sel);
Method _method = class_getInstanceMethod(cls, _sel);
method_exchangeImplementations(method, _method);
};
}
在这里是把这个方法封装了一个c函数,保证了只会执行一次,最好把这个dispatch
放在+ load
函数里面,保证加载次数的减少。
更多博客在www.fgyong.cn可见。