RunTime 的简单使用

2017-01-13 15:18:46来源:http://www.jianshu.com/p/9d258a1e4803作者:壮壮嘟嘟人点击

RunTime简称运行时。就是系统在运行的时候的一些机制;利用它可以做很多事情,比如:为category动态添加属性、动态方法交换、消息转发等,接下来给大家介绍一些简单的方法的使用:进去看看

获取当前实例变量列表

OBJC_EXPORTIvar*class_copyIvarList(Class cls,unsignedint*outCount)

返回一个char类型实例变量的名字

OBJC_EXPORTconstchar*ivar_getName(Ivar v)

获取属性名称的列表

OBJC_EXPORTobjc_property_t*class_copyPropertyList(Class cls,unsignedint*outCount)

返回一个char类型属性名称

OBJC_EXPORTconstchar*property_getName(objc_property_tproperty)

获取方法名称列表

OBJC_EXPORTMethod*class_copyMethodList(Class cls,unsignedint*outCount)

//获取属性名称的列表

- (void)getPropertyNameList{

unsignedintoutCount;

objc_property_t*properties =class_copyPropertyList(self.class, &outCount);

for(inti =0; i < outCount; i++) {

constchar*name =property_getName(properties[i]);

NSString*nameStr = [NSStringstringWithUTF8String:name];

NSLog(@"当前的属性名:%@",nameStr);

}

free(properties);

}

//获取所有的成员变量

-(void)getAllMemberVariables{

unsignedintcount ;

Ivar*ivars =class_copyIvarList(self.class, &count);

for(inti =0; i < count ; i++) {

constchar*name =ivar_getName(ivars[i]);

constchar*type =ivar_getTypeEncoding(ivars[i]);

NSString*nameStr = [NSStringstringWithUTF8String:name];

NSString*typeStr = [NSStringstringWithUTF8String:type];

NSLog(@"anme=== %@encodeType=== %@",nameStr,typeStr);

}

free(ivars);

}

//获取所有方法名

-(void)getMethodList{

unsignedintcount ;

//获取方法名

Method*methods =class_copyMethodList(self.class, &count);

for(inti =0; i < count ; i++ ) {

SELmethodName =method_getName(methods[i]);

NSString*methodNameStr =NSStringFromSelector(methodName);

NSLog(@"方法名====%@",methodNameStr);

//获取每个方法的参数类型

unsignedintargumentsCount =method_getNumberOfArguments(methods[i]);

charargumentsName[512] = {};

for(unsignedintj =0; j < argumentsCount; j++) {

method_getArgumentType(methods[i], j, argumentsName,512);

NSLog(@"第%u个参数类型为:%s", j, argumentsName);

//这个的作用就是清空argumentsName

//想知道详细的 http://blog.csdn.net/ypb455360299/article/details/6412923/

memset(argumentsName,0,strlen(argumentsName));

}

charreturnType[512] = {};

method_getReturnType(methods[i], returnType,512);

NSLog(@"返回值类型===%s",returnType);

NSLog(@"%s===",method_getTypeEncoding(methods[i]));

}

free(methods);

}

这是类方法的交换:



下面是实例方法的交换:



打印的结果如下:






最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台