KVC는runtime와 결합하여 임의의 단층 대상 복사를 실현한다
수요 배경
개발 과정에서 저는 일련의 요청 매개 변수의 클래스 대상을array에 넣고 저장해야 합니다. 저는 깊이 복사를 원합니다. 대상 값이 바뀌지 않고 요청 매개 변수의 임시 대상이 방출된 후에array 내의 대상은 여전히 유효하기 때문에 이것에 따라array를 조작할 수 있습니다. 예를 들어 대량 취소 등입니다.
그러나 이 요청 매개 변수 클래스는 다른 동료가 관리하고 수량이 많기 때문에 해결 방안은 두 가지가 있다.
+ (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를 끼워 넣는 것을 만나면 충분히 감당할 수 없을 수도 있다.아직 성능 테스트를 진행하지 않았습니다. 다만 자신이 잊어버릴까 봐 먼저 글을 발표하는 김에 벽돌을 던져 옥을 끌어올리겠습니다. 코드 작성법의 어떤 문제에 대해서도 어른들의 토론과 시정을 환영합니다. 게게!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.