KVC는runtime와 결합하여 임의의 단층 대상 복사를 실현한다

1506 단어

수요 배경


개발 과정에서 저는 일련의 요청 매개 변수의 클래스 대상을array에 넣고 저장해야 합니다. 저는 깊이 복사를 원합니다. 대상 값이 바뀌지 않고 요청 매개 변수의 임시 대상이 방출된 후에array 내의 대상은 여전히 유효하기 때문에 이것에 따라array를 조작할 수 있습니다. 예를 들어 대량 취소 등입니다.
그러나 이 요청 매개 변수 클래스는 다른 동료가 관리하고 수량이 많기 때문에 해결 방안은 두 가지가 있다.
  • 이 동료는 이 요청 매개 변수 클래스를 심도 있는 복사를 지원합니다.그러나 작업량이 많고 협동 작업으로 인해 많은 저항이 있을 수 있다
  • 스스로 외부에서 이런 유형의 대상을 깊이 있게 copy
  • 직접 부호:
    + (id)copyOjbWithObj:(id)obj {
        //1、 
        Class aClass = NSClassFromString([obj className]);
        //2、 
        id copyOjb = [aClass new];
        unsigned int propertyCount;
        //3、 
        objc_property_t *properties = class_copyPropertyList(aClass, &propertyCount);
        //4、 
        for (int i = 0; i < propertyCount; i++) {
            objc_property_t property = properties[i];
            // 5、 
            char *iVar = property_copyAttributeValue(property, "V");
            NSString *iVarName = [NSString stringWithFormat:@"%s", iVar];
            //  copy , 
            free(iVar);
            //6、 KVC 
            [copyOjb setValue:[obj valueForKey:iVarName] forKey:iVarName];
        }
        //  copy , 
        free(properties);
        
        return copyOjb;
    }
    
     :
    
    XXClass *xxObj2 = [self copyOjbWithObj:xxObj];
    
    

    runtime 원리와 KVC는 여러분들이 저보다 익숙해지셨을 거라고 믿습니다. 밑에서도 물이 많아서 저도 여기서 수다를 떨지 않겠습니다.현재 이 방법의 단점은 단층 간단한 데이터 구조의 복사만 지원하는 것이다. 예를 들어 대상에 array나 dictionary를 끼워 넣는 것을 만나면 충분히 감당할 수 없을 수도 있다.아직 성능 테스트를 진행하지 않았습니다. 다만 자신이 잊어버릴까 봐 먼저 글을 발표하는 김에 벽돌을 던져 옥을 끌어올리겠습니다. 코드 작성법의 어떤 문제에 대해서도 어른들의 토론과 시정을 환영합니다. 게게!

    좋은 웹페이지 즐겨찾기