将CG结构序列化为适当对象的最佳实践

时间:2012-11-15 05:29:21

标签: iphone objective-c ios serialization core-graphics

将基于CoreGraphics结构的值(例如CGRectCGPoint等)存储到适当的对象中以便存储在集合类中的最佳做法是什么?

您可以使用NSValue

    NSMutableArray *values = [NSMutableArray array];

    CGRect rect = CGRectMake(0, 0, 100, 100);
    NSValue *value = [NSValue valueWithCGRect:rect];

    [values addObject:value];

    CGRect rectValue = [values[0] CGRectValue];

NSString

    NSMutableArray *values = [NSMutableArray array];

    CGRect rect = CGRectMake(0, 0, 100, 100);
    NSString *string = NSStringFromCGRect(rect);

    [values addObject:string];

    CGRect rectValue = CGRectFromString(string);

只是想知道是否有一些我失踪的东西,而另一个则有优势。

2 个答案:

答案 0 :(得分:1)

第一种方式更“规范”,因为它在内存中的占用空间更小,并且不需要太多CPU来进行转换。由于转换为十进制和后退,也不存在精度损失的可能性:struct内的浮点数以其原始格式存储。

公平地说,除非你需要处理成千上万个对象,否则这两种方法之间的差异可以忽略不计。

答案 1 :(得分:0)

两种方法都有效。 NSValue的使用最有可能比使用NSString方法更有效。字符串处理通常比NSValue使用的简单内存复制慢得多。

如果你只做了一些,那么总体来说可能没什么区别。但如果你有很多这些要转换,请使用NSValue方法以获得更好(更快)的性能。