id viewClass = objc_getClass("MyObject");
unsigned int outCount;
objc_property_t *properties = class_copyPropertyList(viewClass, &outCount);
for (int i = 0; i < outCount; i++) {
objc_property_t property = properties[i];
printf("%s , %s \n", property_getName(property), property_getAttributes(property));
}
Method *methods = class_copyMethodList(viewClass, &outCount);
for (int i = 0; i < outCount; i++) {
Method method = methods[i];
SEL sel = method_getName(method);
NSLog(@"method--%@", NSStringFromSelector(sel));
}
直接执行imp
IMP imp = [self methodForSelector:@selector(clcikedMe)];
imp();
等价于
IMP imp2 = class_getMethodImplementation([self class], @selector(clcikedMe));
imp2();
取得所在类库的名字 并打印类库里所以类的名字
Class b = objc_getClass("UIView");
const char* sf = class_getImageName(b);
const char ** classes = objc_copyClassNamesForImage(sf, &outCount);
for (int i = 0; i < outCount; i++) {
NSLog(@"%s", classes[i]);
}
绑定block
IMP blockImp = imp_implementationWithBlock(^(id obj , NSString *str) {
NSLog(@"%@", str);
});
class_addMethod([NSObject class], @selector(testBlock:), blockImp, "v@:@");
NSObject *o0 = [[NSObject alloc] init];
[o0 performSelector:@selector(testBlock:) withObject:@"hellow world"];
参考博客:
http://southpeak.github.io/blog/2014/11/09/objective-c-runtime-yun-xing-shi-zhi-liu-:shi-yi/
http://yulingtianxia.com/blog/2014/11/05/objective-c-runtime/