Сериализация / Бинарный формат

@interface Info : NSObject <NSSecureCoding>
@property (nonatomicint infoId;
@end

@implementation Info

+ (BOOL)supportsSecureCoding {
    return YES;
}

- (void)encodeWithCoder:(NSCoder *)coder {
    [coder encodeInt:self.infoId
        forKey:@"infoId"];
}

- (instancetype)initWithCoder:
    (NSCoder *)coder {
    self = [super init];
    if (self) {
        _infoId = [coder
            decodeIntForKey:@"infoId"];
    }
    return self;
}
@end

@interface Data : NSObject <NSSecureCoding>
@property (nonatomicNSString *text;
@property (nonatomicInfo *info;
@end

@implementation Data

+ (BOOL)supportsSecureCoding {
    return YES;
}

//the nested object encodes itself
- (void)encodeWithCoder:(NSCoder *)coder {
    [coder encodeObject:self.text
        forKey:@"text"];
    [coder encodeObject:self.info
        forKey:@"info"];
}

- (instancetype)initWithCoder:
    (NSCoder *)coder {
    self = [super init];
    if (self) {
        _text = [coder
            decodeObjectOfClass:[NSString class]
            forKey:@"text"];
        _info = [coder
            decodeObjectOfClass:[Info class]
            forKey:@"info"];
    }
    return self;
}
@end

Data *data = [Data new];
data.text = @"Hello";
data.info = [Info new];
data.info.infoId = 1;

NSData *bin = [NSKeyedArchiver
    archivedDataWithRootObject:data
    requiringSecureCoding:YES
    error:nil];