赞
踩
- 暂时没有
Xcode默认是不建议开发者使用runtime的,所以在Xcode直接使用runtime的语法是会报错误的。
如果要在Xcode中使用runtime的语法,是需要配置一下才可以使用,配置方法如下图:
/* 获取对象的所有方法 */ -(NSArray *)getAllMethods { NSMutableArray *tempMuArr = [[NSMutableArray alloc] init]; unsigned int methCount = 0; Method *meths = class_copyMethodList([self class], &methCount); for(int i = 0; i < methCount; i++) { Method meth = meths[i]; SEL sel = method_getName(meth); const char *name = sel_getName(sel); NSLog(@"%s", name); [tempMuArr addObject:[NSString stringWithFormat:@"%s", name]]; } free(meths); return [tempMuArr copy]; }
/* 获取对象的所有属性 */ - (NSArray *)getAllProperties { u_int count; objc_property_t *properties = class_copyPropertyList([self class], &count); NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count]; for (int i = 0; i < count ; i++) { const char* propertyName =property_getName(properties[i]); [propertiesArray addObject: [NSString stringWithUTF8String: propertyName]]; } free(properties); return propertiesArray; }
//调用对象方法
objc_msgSend(tempIamge, @selector(drawInRect:), CGRectMake(0, 0, 1242, 2208));
//调用类方法
//方式1
UIImage *tempImage = ((UIImage *(*)(id, SEL, NSString *)) objc_msgSend)((id)[UIImage class], @selector(imageNamed:), @"test.jpg");
//方式2
UIImage *tempImage = ((UIImage *(*)(id, SEL, NSString *)) objc_msgSend)((id)objc_getClass("UIImage"), sel_registerName("imageNamed:"), @"test.jpg");
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。