iphone – 什么是最好的方式把一个c结构在NSArray?

iphone – 什么是最好的方式把一个c结构在NSArray?,第1张

概述在NSArray中存储c结构的常用方法是什么?优点,缺点,内存处理? 值得注意的是,valueWithBytes和valueWithPointer之间的区别 – 由justin和catfish引发。 Here’s a link到Apple的关于valueWithBytes的讨论:objCType:为未来的读者… 对于一些横向思维和更多的性能,Evgen提出了在C中使用STL :: vector的问 在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)],nil];

BTW作为参考,感谢Jarret HardIE,以下是如何在NSArray中存储CGPoints和类似的:

NSArray *points = [NSArray arrayWithObjects:        [NSValue valueWithCGPoint:CGPointMake(6.9,6.9)],[NSValue valueWithCGPoint:CGPointMake(6.9,nil];

(见How can I add CGPoint objects to an NSArray the easy way?)

解决方法 NSValue不仅支持CoreGraphics结构 – 你可以使用它为自己的。我建议这样做,因为类可能比NSData更轻的重量为简单的数据结构。

只需使用如下的表达式:

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

并得到的价值回来:

Megapoint p;[value getValue:&p];
总结

以上是内存溢出为你收集整理的iphone – 什么是最好的方式把一个c结构在NSArray?全部内容,希望文章能够帮你解决iphone – 什么是最好的方式把一个c结构在NSArray?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1049083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存