我希望能够将一个objective-c对象,例如一个NSArray或UIImage转换成一个NSData对象,然后我可以用它来写入磁盘。我首先将它们转换为NSValue,然后我计划将其转换为NSData. 这个问题提供了部分答案,但是当他们使用. 时NSNumber,他们真的不需要将其转换回NSValue.
我已经看到了其他问题,例如这个依赖于 的问题NSKeyedArchiver,但由于发生了巨大的规模膨胀,我想避开这个问题。
因此,从第一个问题开始,我目前用于从 中编码NSData对象的代码NSValue如下:
+(NSData*) dataWithValue:(NSValue*)value {
NSUInteger size;
const char* encoding = [value objCType];
NSGetSizeAndAlignment(encoding, &size, NULL);
void* ptr = malloc(size);
[value getValue:ptr];
NSData* data = [NSData dataWithBytes:ptr length:size];
free(ptr);
return data;
}
我的问题是我将如何解码NSData以这种方式编码的对象并objCType从NSValue?
我会假设我会使用这些方面的东西
[NSValue valueWithBytes:[data bytes] objCType:typeHere];
我将如何取回类型信息?