我正在编写一个类文件,并将 aCGPoint
作为 Ivar 包含在内。这让我想知道与较小的 Objective-C 数据结构相关的开销。内存占用是否CGPoint
足以证明创建指向它的指针是合理的,或者我只是创建一个指向 2 个CGfloat
值的指针?就此而言,如果我只需要 x/y 坐标,为什么不将 2 个整数作为 ivars 插入?
在相关说明中,是否有描述微小数据结构的命名法,例如“小数据结构”或“琐碎数据结构”;一个描述由几个原语组成的结构的词。
我正在编写一个类文件,并将 aCGPoint
作为 Ivar 包含在内。这让我想知道与较小的 Objective-C 数据结构相关的开销。内存占用是否CGPoint
足以证明创建指向它的指针是合理的,或者我只是创建一个指向 2 个CGfloat
值的指针?就此而言,如果我只需要 x/y 坐标,为什么不将 2 个整数作为 ivars 插入?
在相关说明中,是否有描述微小数据结构的命名法,例如“小数据结构”或“琐碎数据结构”;一个描述由几个原语组成的结构的词。
小对象肯定存在问题,但据说系统中已经有几个小对象优化。
一般来说,如果你需要一个对象,就使用一个对象。如果没有,那就不要。
然而,更大的问题是编写代码,以便人类易于阅读,并且易于人类维护。使用性能工具(如 Instruments)隔离需要解决系统资源利用率的地方,然后才解决这些问题。
当然,有一些明显的愚蠢的事情要避免,但总的来说,专注于干净的设计,以及易于阅读/更改的实现。在您的测试套件上运行性能工具应该很容易发现任何错误。
首先,在遇到性能问题之前不要担心开销。
大多数(但不是全部)面向对象的语言在小的、非对象的类型和更大的、基于对象的类型之间做出了区分;但边界是模糊的。决定如何表示类型的一个有用区别是您是否将其视为一个简单的值,您可能认为它是对它进行操作或计算的;或更涉及的东西,可能是具有固有行为、操作等的东西。
内置的原始类型主要是值:整数、字符等。在这种情况下,复数、分数、坐标等都是简单的值——使用结构;树,堆栈,层次结构不是 - 使用对象。
在您的相关说明中考虑许多使用“价值”,您也可以考虑“复合”。“Petty”不是一个好的选择,错误的内涵 ;-) 其他人可能会说“basic”、“trivial”、“structure”或“record”——而后两者也可以用来指代他们经常使用的非常大的类型用于小的。