轉做ios開發有一段時間了,但一直沒有時間整理知識,今天開始分享自己的一些心得,主要為了交流學習,錯誤的地方希望大家多多指正,共同進步,好的下面進入正題。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{ unsigned int outCount, i; objc_property_t *properties = class_copyPropertyList([obj class], &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]; id value = [obj valueForKey:key]; str = [NSString stringWithFormat:@"%@ /n %@%@:%@",str,nullStr,key,[self printStr:value Num:key.length + num +1]]; } str = [NSString stringWithFormat:@"%@ /n %@}",str,nullStr]; return str;}-(NSString *)printNullStr:(NSInteger)num{ NSString * str = @""; for (int i = 0 ; i<num; i++) { str = [str stringByAppendingString:@" "]; } return str;}
記得需要申明頭文件
#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
}
}
}
新聞熱點
疑難解答