자동 압축 파일 해제

2218 단어
ios 응용 상용 데이터 저장 방식
  • plist (XML 속성 목록 압축 파일)
  • NSUserDefault
  • 선 호 설정
  • NSKeydeArchiver 압축 파일 (사용자 정의 대상 저장)
  • SQLite 3 (데이터베이스, 관계 형 데이터베이스, 대상 을 직접 저장 할 수 없습니다. 데이터베이스 문 구 를 작성 하여 대상 을 분리 하여 저장 합 니 다)
  • Core Data (대상 형 데이터베이스, 내부 부분 차단)
  • NSKeydeArchiver 압축 파일, NSKeyedUnarchiver 압축 파일
    @protocol NSCoding  
    
    -  (void)encodeWithCoder:(NSCoder *)aCoder;  
    
    -  (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;  
    
    @end
    

    대상 을 압축 파일 하려 면 먼저 NSCoding 의 이 두 협 의 를 지 켜 야 합 니 다. 이 두 가지 방법 을 실현 할 때 key 값 과 유형 이 일치 하 는 것 을 주의해 야 합 니 다. 그리고 클래스 가 10 여 개의 속성 이나 더 많은 속성 이 있 을 때 우 리 는 여러 줄 의 코드 를 써 서 실현 해 야 합 니 다.Objective - C 가 실 행 될 때 라 이브 러 리 는 대상 이 실 행 될 때 속 하 는 클래스 와 모든 속성 을 얻 을 수 있 는 매우 편리 한 방법 을 제공 하고 KVC 를 통 해 값 을 액세스 할 수 있 습 니 다. 그러면 우 리 는 obbc / runtime + KVC 지식 을 활용 하여 자동 으로 압축 파일 을 푸 는 과정 을 완성 할 수 있 습 니 다.
    / * * 압축 파일 * /
    
    - (void)encodeWithCoder:(NSCoder *)aCoder
    {
        unsigned int outCount;
        objc_property_t *properties = class_copyPropertyList([self class], &outCount);
        for (int i = 0; i < outCount; i++)
        {
            objc_property_t property = properties[i];
            const char *name = property_getName(property);
            NSString* propertyName = [NSString stringWithUTF8String:name];
            [aCoder encodeObject:[self valueForKey:propertyName] forKey:propertyName];
        }
        
    }
    

    / * * 파일 해제 * /
    
    - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder
    {
        if (self = [super init])
        {
            unsigned int outCount;
            objc_property_t *properties = class_copyPropertyList([self class], &outCount);
            for (int i = 0; i < outCount; i++)
            {
                objc_property_t property = properties[i];
                const char *name = property_getName(property);
                NSString* propertyName = [NSString stringWithUTF8String:name];
                [self setValue:[aDecoder decodeObjectForKey:propertyName] forKey:propertyName];
            }
    
        }
        return self;
    }
    

    주: 헤더 파일 가 져 오기 \ # import
    또한 하나의 기본 모델 을 밀봉 하여 이 두 가지 방법 을 실현 할 수 있 으 며 필요 할 때 기본 모델 을 계승 하 는 하위 모델 을 직접 만 들 면 된다.
    github:https://github.com/ChenZhiCN/CZModel

    좋은 웹페이지 즐겨찾기