如何在NSArray
中存储C语言结构体?有什么优缺点和内存处理方面的问题?
特别是,valueWithBytes
和valueWithPointer
之间有什么区别?这个问题由justin和catfish提出。
这里有一个链接,可以了解苹果关于valueWithBytes:objCType:
的讨论,供未来读者参考...
对于一些横向思考和更多性能方面的考虑,Evgen提出了在C++中使用STL::vector
的问题。
(这引发了一个有趣的问题:是否有一个快速的C库,类似于STL::vector
但轻量得多,允许最小的"整洁的数组处理" ...?)
所以原始问题是...
例如:
typedef struct _Megapoint {
float w,x,y,z;
} Megapoint;
那么:存储自己的结构体在NSArray
中的正常、最佳和惯用方式是什么,如何处理该习惯中的内存?请注意,我特别寻找通常用于存储结构体的习惯用法。当然,可以通过创建一个新的小类来避免这个问题。但是我想知道实际将结构体放入数组中的通常惯用法,谢谢。
顺便说一句,这里有可能不是最佳的NSData方法...
Megapoint p;
NSArray *a = [NSArray arrayWithObjects:
[NSData dataWithBytes:&p length:sizeof(Megapoint)],
[NSData dataWithBytes:&p length:sizeof(Megapoint)],
[NSData dataWithBytes:&p length:sizeof(Megapoint)],
nil];
顺便提一下,感谢Jarret Hardie的参考意见,以下是如何将CGPoints
及其类似类型存储在NSArray
中的方法:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];