【发布时间】:2011-05-29 20:31:02
【问题描述】:
在NSArray 中存储 c 结构的常用方法是什么?优点、缺点、内存处理?
值得注意的是,valueWithBytes 和 valueWithPointer 之间有什么区别——由 justin 和 catfish 下面提出。
Here's a link Apple 为未来的读者讨论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,以下是如何在 NSArray 中存储 CGPoints 和类似内容:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];
(见How can I add CGPoint objects to an NSArray the easy way?)
【问题讨论】:
-
您将其转换为 NSData 的代码应该没问题......并且没有内存泄漏......但是,不妨使用标准的 C++ 结构体 Megapoint p[3] 数组;跨度>
-
在问题出现两天之前,您无法添加赏金。
-
valueWithCGPoint 不适用于 OSX。它是 UIKit 的一部分
-
@Ippier valueWithPoint 在 OS X 上可用
标签: iphone objective-c cocoa struct nsarray