将基于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);
只是想知道是否有一些我失踪的东西,而另一个则有优势。
答案 0 :(得分:1)
第一种方式更“规范”,因为它在内存中的占用空间更小,并且不需要太多CPU来进行转换。由于转换为十进制和后退,也不存在精度损失的可能性:struct
内的浮点数以其原始格式存储。
公平地说,除非你需要处理成千上万个对象,否则这两种方法之间的差异可以忽略不计。
答案 1 :(得分:0)
两种方法都有效。 NSValue
的使用最有可能比使用NSString
方法更有效。字符串处理通常比NSValue
使用的简单内存复制慢得多。
如果你只做了一些,那么总体来说可能没什么区别。但如果你有很多这些要转换,请使用NSValue
方法以获得更好(更快)的性能。