사전 회전 모델 핵심 원리

1659 단어

RunTime 동적을 사용하여 원하는 속성 얻기


이유: 일반적으로 서버에서 얻은 데이터는 모두 키 값이 많기 때문에 일부는 필요하지 않다. 만약에 모델이 이런 속성을 쓰지 않으면 모델을 원키로 돌릴 수 없기 때문에 필요한 속성을 동적으로 얻을 방법을 찾아야 한다.
1, 사전의 첫 번째 키 가져오기 방법(루트 키), 사전에 키 범람기 대상
 // key  
 NSEnumerator *enumerator = dict.keyEnumerator;
 // ( )
 enumerator. allObjects 
 // key( )
 NSString *rootKey = [enumerator nextObject];


2. 모델 내에서 하나의 유형 방법을 정의한다.
RunTime 
objc_property_t *properties = class_copyPropertyList([self class], &count);

3. 사전 회전 모형은 속성 그룹을 두루 훑어보고 값이 비어 있지 않을 때 속성에 값을 부여한다.
// 
 + (instancetype)newsWithDict:(NSDictionary *)dict{ 
 ZLNews *new = [[self alloc]init];
 // 
 NSArray *properties = [self properties];
 // 
 for (NSString *pro in properties) {
 // 
 if (dict[pro] != nil) {
 [new setValue:dict[pro] forKeyPath:pro];
     }
  }
 return new;
}
// 
+ (NSArray *)properties{
 // 
 NSMutableArray *arrM = [NSMutableArray array];
 // 
 // count 
 unsigned int count = 0;
 // 
 objc_property_t *properties = class_copyPropertyList([self class], &count);
 // 
 for (NSInteger i = 0; i < count; i++) {
 // 
 objc_property_t p = properties[i];
 // 
 const char *cname = property_getName(p);
 // oc
 NSString *OCName = [[NSString alloc]initWithCString:cname encoding:NSUTF8StringEncoding];
 // 
 [arrM addObject:OCName];
 }
 return arrM.copy;
}

원리:
  • RunTime에서 copyPropertyList 방법(속성 목록 복사)을 사용합니다.그리고 속성 분열을 옮겨다니며 속성 이름을 얻습니다(property getName(p);).속성 이름을 속성 그룹 (properties) 에 추가합니다.그리고 사전 회전 모형은 당신이 제공한 속성 그룹에 따라 속성에 값을 부여합니다.
  • setValueforUndefine 방법을 다시 써서 오류를 방지할 수 있습니다.(찾을 수 없는 키 충돌)
  • 좋은 웹페이지 즐겨찾기