iOS 객체 복제 도구

1458 단어
시간이 나면 작은 공구들을 정리해 봅시다.
일부 경우 우리는 어떤 모델에 대해 조작을 해야 할 수도 있고, 조작 후에 원본 데이터를 바꾸기를 원하지 않을 수도 있다.이럴 때 생각나는 거.
1, New 새 객체에 값을 지정합니다.
2. 협의를 실현한다.실제로는 하나하나 복제하고 있다.
만약 대상이 비교적 복잡하거나 조작 대상이 비교적 많다면.모두 비교적 시간이 걸리는 일이다.그래서 AutoCopy라는 자동 복제 클래스를 캡슐화했습니다.다운로드 주소:https://github.com/anjohnlv/AutoCopy
사용 방법: 1. NSObject+Copy를 다운로드합니다.h와 NSObject+Copy.m, 프로젝트를 가져옵니다.2. 이동이 필요한 곳에 헤드#import'NSObject+Copy.h'3을 도입하고 복제가 필요한 대상에 autoCopy 방법을 호출한다: Person *clone = [person autoCopy];이 가젯은 NSArray, NSDictionary 등의 대상을 지원하지 않으며, 이 대상들은mutableCopy를 직접 호출할 수 있습니다.
원리: 실행할 때 클래스의 모든 속성 이름을 가져오고 kvc를 통해 오래된 모델에서 새 모델로 값을 가져옵니다.
-(NSArray *)allPropertyName {
    unsigned int propertyCount = 0;
    objc_property_t *properties = class_copyPropertyList([self class], &propertyCount);
    NSMutableArray *allPropertyName = [NSMutableArray new];
    for (unsigned int i = 0; i < propertyCount; ++i) {
        objc_property_t property = properties[i];
        NSString *propertyName = [NSString stringWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
        [allPropertyName addObject:propertyName];
    }
    free(properties);
    return allPropertyName;
}
-(instancetype)autoCopy {
    if (self) {
        id copyObject = [[self class] new];
        NSArray *allPropertyName = [self allPropertyName];
        for (int i=0; i

만약 무슨 잘못이 있으면 도끼질을 환영합니다.

좋은 웹페이지 즐겨찾기