runtime反射属性列表:

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

runtime运行时:转做ios开发有一段时间了,但一直没有时间整理知识,今天开始分享自己的一些心得,主要为了交流学习,错误的地方希望大家多多指正,共同进步,好的下面进入正题。runtime很多人一定不陌生(陌生的话,大家可以选学习一下,网上有很多大神已经给出了),但我们做到学以致用了么?下面我来分享一点我在runtime中使用的一点心得,希望对大家有所帮助。

runtime反射属性列表:通过runtime可以反射取到我们运行时类的属性列表。这个其实对我们开发是非常有帮助的。

今天来讲它的一种使用方法:

MVC模式中,我们封装的模型中会包含大量的实体,属性。而我们在开发的时候经常遇到传递model的情况,为了开发方便,需要查看model中各个属性的值。而runtime就帮我们很好的解决了这个问题。废话不多说了,直接上代码。

-(void)PRintAll:(id)obj{

NSString* str =nil;

str= [NSString stringWithFormat:@"\n%@:\n",object_getClass(obj)];

str= [str stringByAppendingString:[self printStr:obj Num:0]];

str= [NSString stringWithFormat:@"%@",str];

NSLog(@"%@",str);

}-(NSString *)printStr:(id)obj Num:(NSInteger)num{

unsignedintoutCount, i;

objc_property_t*properties = class_copyPropertyList([objclass], &outCount);if(outCount ==0) {return[NSString stringWithFormat:@"%@",obj];

}

NSString* str =nil;

NSString* nullStr =[self printNullStr:num];

str=@"{";for(i=0; i<outCount; i++) {

objc_property_t property=properties[i];

NSString* key =[[NSString alloc]initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];idvalue =[obj valueForKey:key];

str= [NSString stringWithFormat:@"%@ \n %@%@:%@",str,nullStr,key,[self printStr:value Num:key.length + num +1]];

}

str= [NSString stringWithFormat:@"%@ \n %@}",str,nullStr];returnstr;

}-(NSString *)printNullStr:(NSInteger)num{

NSString* str =@"";for(inti =0; i<num; i++) {

str= [str stringByAppendingString:@""];

}returnstr;

}

记得需要申明头文件

#import<objc/runtime.h>

将上面的方法 添加到NSObject的类别当中,在.pch中申明为全局的

这样任何一个id对象就都可以调用printAll方法来输出打印了

效果如下:

014-05-06 17:38:58.013 LTTest[10011:90b]

MyTestModle:

{

name:吃饭了

address:喝水了

model:{

name:吃饭了2

address:2

mymodel:{

name:吃饭了3

address:喝水了3

}

}

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航