2

将基于 CoreGraphics 结构的值(例如 , 等)存储到适当的对象中以便存储在集合类中的最佳实践是CGRect什么CGPoint

您可以使用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);

只是想知道我是否缺少某些东西,并且其中一个比另一个有优势。

4

2 回答 2

1

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

公平地说,这两种方法之间的差异可以忽略不计,除非您需要处理数以万计的对象。

于 2012-11-15T05:34:48.727 回答
0

两种方法都有效。使用NSValue很可能比使用NSString方法更有效。字符串处理通常比NSValue.

如果您只做一些事情,那么总体上可能没有什么不同。但是,如果您有很多这些要转换,请使用该NSValue方法以获得更好(更快)的性能。

于 2012-11-15T05:34:24.603 回答