NSArray中存储c struct 的常用方法是什么?优点,缺点,内存处理?

值得注意的是,valueWithBytesvalueWithPointer之间的区别是什么——由贾斯汀和鲶鱼饲养.

Here's a link到苹果为future 读者讨论的valueWithBytes:objCType:...

为了进行一些横向思考并更多地关注性能,Evgen提出了在C++中使用STL::vector的问题.

(That raises an interesting issue: is there a fast c library, not unlike 100 but much much lighter, that allows for the minimal "tidy handling of arrays" ...?)

所以最初的问题...

例如:

typedef struct _Megapoint {
    float   w,x,y,z;
} Megapoint;

那么:在NSArray中存储自己的 struct 的正常、最好、惯用的方法是什么?你如何处理这种惯用方法中的记忆?

请注意,我特别寻找存储 struct 的常用习惯用法.当然,可以通过创建一个新的小类来避免这个问题.不过,我想知道将 struct 放入数组的常用习惯用法是什么,谢谢.

顺便说一句,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?)

推荐答案

NSValue不仅支持CoreGraphics struct ——你也可以自己使用它.我建议这样做,因为对于简单的数据 struct ,这个类可能比NSData轻.

只需使用如下表达式:

[NSValue valueWithBytes:&p objCType:@encode(Megapoint)];

为了重新获得价值:

Megapoint p;
[value getValue:&p];

Objective-c相关问答推荐

Apple Silicon 上的 dispatch_time 计算失败

MKMapView zoom 到 viewDidLoad 上的用户位置?

Xcode 是否支持区域?

在objective-c中isa是什么意思?

如何使用 NSString drawInRect 使文本居中?

是否可以在 nsstring 中包含引号?

Facebook 的 UIActivityViewController 不显示默认文本

Objective-C (cocoa) 等价于python的endswith/beginswith

在Objective-C中替换字符串中的多个字符?

属性与实例变量

Objective-C 实例变量?

我应该使用 NSUserDefaults 还是 plist 来存储数据?

从 NSString 中删除换行符

计算 UILabel 文本大小

如何为 iPhone 应用程序创建多个主题/皮肤?

如何修复UIPopoverController 已弃用警告?

获取最顶层的 UIViewController

请求访问相机胶卷的权限

将 Xcode 组创建为文件系统文件夹的工作流程

Xcode 在调试时判断表达式