【发布时间】:2014-05-14 14:58:32
【问题描述】:
我目前正在为 iPhone 开发 Conway 的 Game of Life 模拟器,我有一些关于内存管理的问题。请注意,我使用的是 ARC。
对于我的应用程序,我将需要大量的 C 风格 structs 或 Objective-C 对象来表示单元格。可能有几千个,所以很明显,内存管理浮现在脑海中。 Structs 我对结构的论点是单元格不需要典型的 OO 属性。他们将持有的唯一东西是两个BOOL 值,因此这些单元不会占用大量内存。另外,我需要使用一个二维数组。使用结构,我可以使用 C 风格的二维数组。据我所知,在 Objective-C 中没有替代品。我觉得只为两个布尔值创建一个对象是矫枉过正的。
Objective-C 对象 我的论点(以及大多数其他人的论点)是围绕 Objective-C 对象的内存管理使用 ARC 非常简单和高效。此外,我还看到struct 对对象的内存减少不是那么大的论点。
所以,我的问题。我应该选择老式、精简且兼容二维数组structs 吗?或者我应该坚持使用典型的 Objective-C 对象并冒使用额外内存的风险。
事后思考:如果您推荐 Objective-C 对象,请提供一种表示二维数组的替代存储方法。这很关键,也是使用 Objective-C 对象的最大缺点之一。
谢谢。
【问题讨论】:
-
简单地使用一个整数的位域,你可以用 NSNumber 包装它来表现得像一个objective-c对象。和一个忠告。 Apple 的指导方针是,您应该坚持使用最高级别的抽象,并且只有在遇到性能问题时才进行优化或返回到较低级别。根据我的真实经验,在尝试之前过于担心性能有时会浪费很多时间。
-
@nsuinteger 然后我在包装 objc 类时丢失了二维数组。这是使用原始二维数组的优势之一。
-
+1 并感谢您提出问题并考虑权衡,无论如何。我在下面回答的想法。 -RP
-
供将来参考
SomeObject *item = someArray[row][col];在 Objective-C 中是完全有效的语法,前提是row和col是整数值,而someArray是 rowArrays 的 NSArray,其中每个 rowArray 是SomeObjects 的 NSArray。
标签: ios objective-c arrays memory-management struct