項(xiàng)目結(jié)束了际邻,總結(jié)一下我用到RUNTime的地方顶岸,和大家討論一下腔彰。主要在一下幾個(gè)方面用到了RUNTime。
1.保存用戶本地信息辖佣,由于項(xiàng)目中需要一個(gè)用戶信息是本地的霹抛,在下一次登錄重新登錄之前不會(huì)改變,所以就想使用RUNTime和歸檔聯(lián)合使用卷谈,保存整個(gè)類的信息杯拐。具體實(shí)現(xiàn)如下所示。但是要注意一個(gè)問題世蔗,就是這個(gè)類里不能包括非對(duì)象類型的數(shù)據(jù)端逼,歸檔只能歸檔對(duì)象類型數(shù)據(jù),代碼如下供參考
? 首先污淋,把整個(gè)用戶信息類寫入本地顶滩,
+ (void)writeObject:(UserDataObject *)pObject{
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:pObject];
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setObject:data forKey: [[pObject class] description] ];}
存的是nsdate類型,就需要把類歸檔寸爆,通過RUNTime訪問類的所有變量礁鲁,并歸檔
unsigned int propertyCount = 0;
objc_property_t *propertyList = class_copyPropertyList([self class], &propertyCount);
for ( int i = 0; i < propertyCount; i++ ) {
objc_property_t *thisProperty = propertyList + i;
const char* propertyName = property_getName(*thisProperty);
NSString *strPropertyName = [NSString stringWithUTF8String:propertyName];
NSString *strFirst = [[strPropertyName substringToIndex:1] capitalizedString ];
strPropertyName = [strPropertyName substringFromIndex:1];
NSString *objName = [NSString stringWithFormat:@"%@%@", strFirst, strPropertyName];
NSString *setMethodName = [NSString stringWithFormat:@"set%@:", objName ];
NSString *getMethodName = [NSString stringWithUTF8String:propertyName];
[self performSelector:NSSelectorFromString(setMethodName) withObject: [pObject performSelector:NSSelectorFromString(getMethodName)]];
}
2.改變時(shí)間選擇器的顏色,系統(tǒng)的時(shí)間選擇器默認(rèn)黑白搭配赁豆,而且其屬性中并沒有改變顏色的屬性仅醇,這是我們通過RUNTime訪問類的所有變量,找到控制顏色的變量魔种,并且在運(yùn)行時(shí)改變其顏色析二。其實(shí)textColor是控制顏色的私有變量
unsigned outCount; int i; objc_property_t *pProperty = class_copyPropertyList([UIDatePicker class], &outCount); for (i = outCount -1; i >= 0; i--) { // 循環(huán)獲取屬性的名字 property_getName函數(shù)返回一個(gè)屬性的名稱
NSString *getPropertyName = [NSString stringWithCString:property_getName(pProperty[i]) encoding:NSUTF8StringEncoding]; NSString *getPropertyNameString = [NSString stringWithCString:property_getAttributes(pProperty[i]) encoding:NSUTF8StringEncoding]; if([getPropertyName isEqualToString:@"textColor"]) { [_datePicker setValue:[UIColor blueColor] forKey:@"textColor"]; } NSLog(@"%@====%@",getPropertyNameString,getPropertyName); }? ? ? ? self.backgroundColor = [UIColor whiteColor];
}
對(duì)RUNTime的了解還不夠深入,只是簡(jiǎn)單的運(yùn)用了一下节预,以后會(huì)更深層次的去了解